php - 在何处以及如何为 Codeception Api 测试(Cests)设置数据

标签 php api codeception acceptance

我正在为 Api 测试设置 Codeception。

我有一个 Cest 类,说...

class ZooCest {
    public function addingALionToZoo(ApiTester $I)
    {
        $I->sendPost('zoo/add_animal', ['animal_id' => $animalId]);
    }
}

问题是,我在哪里以及如何设置数据来测试我的 api。

按照前面的例子,我可以这样做:

class ZooCest {
    public function addingALionToZoo(ApiTester $I)
    {
        $lion = new Animal('lion');
        $lion->save();

        $I->sendPost('zoo/add_animal', ['animal_id' => $lion->getId()]);
    }
}

但是当业务逻辑复杂时,这会变得困惑。

我可以在支持文件夹中有一个分解器,所以我可以这样做:

class ZooCest {
    public function addingALionToZoo(ApiTester $I)
    {
        $lion = DataFactory::create('lion');

        $I->sendPost('zoo/add_animal', ['animal_id' => $lion->getId()]);
    }
}

但是随着时间的流逝,它可能会增长很多,变得越来越复杂,达到我们甚至可能需要测试该逻辑的程度! (是的,这是个玩笑)

谢谢。

最佳答案

我认为没有一个“最佳位置”,因为这完全取决于您的项目和测试,所以这更像是一个理论上的答案。

如果您有(或可能有)那么多逻辑,我可能会专门为此类内容创建一个新目录,您可以在其中创建对您有意义的尽可能多的类。例如:

- app
  - TestsData
    - Zoo.php
    - Oceanarium.php
    - Theatre.php
    - Shop.php

你可以更进一步,像这样划分它:

- app
  - TestsData
    - Zoo
      - Lion.php
      - Monkey.php
    - Oceanarium
      - Shark.php

无论哪种方式,您都可以在每个类中创建一些方法,以便将您想要的信息“植入”数据库(TestsData/Zoo/Lion.php 的演示)。

<?php

use Animal;

class Lion 
{
    public static function add() {
        $lion = new Animal('lion');
        $lion->save();

        return $lion;
    }
}

然后,在您的测试中使用:

class ZooCest {
    public function addingALionToZoo(ApiTester $I)
    {
        $I->sendPost('zoo/add_animal', ['animal_id' => Lion::add()]);
    }
}

关于php - 在何处以及如何为 Codeception Api 测试(Cests)设置数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30463655/

相关文章:

php - 无法使用主机、用户和密码连接到 mysql 数据库

php - 在 php 中使用 pdo 创建数据库

php - 如何在 Codeception 测试中选择单击元素?

php - 使用 Codeception 和 Gherkin 时 PhpStorm 中未定义的步骤引用

php - 在一次查询中获取视频和类别

c++ - 我可以像这样混合使用 pimpl 和 C 接口(interface)吗?

python 循环提取 API 数据以迭代 URL

ajax - API网关CORS问题,具有正确的有效负载

testing - 如何在 codeception 验收测试中打开 url/网页?

php - IntelliJ PHP 调试器未连接