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

时间:2015-05-26 16:06:50

标签: 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()]);
    }
}

但随着时间的推移,这种情况可能会增长很多,变得越来越复杂,甚至可能需要对这种逻辑进行测试! (是的,这是一个笑话)

感谢。

1 个答案:

答案 0 :(得分:0)

我认为这不是一个“最佳位置”,因为这一切都取决于你的项目和你的测试,所以这更像是一个理论上的答案。

如果你有(或可能有)那么多逻辑,我可能会为这种东西创建一个新目录,你可以创建尽可能多的类。例如:

- 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()]);
    }
}