我在普通PHPUnit
编写单元测试多年后才开始使用Codeception。有一件事让我烦恼,我无法找到一种方法来控制调用测试的顺序。
在纯旧PHPUnit
中,我正在手动构建测试结构:
$suite = new PHPUnit_Framework_TestSuite();
$suite->addTest('MyFirstTest');
$suite->addTest('MySecondTest');
并将按照添加到套件中的顺序调用测试。另一方面,Codeception
似乎在遍历目录并运行它可以找到的每个测试。
我希望能够在两个级别上控制测试的顺序:
unit tests
之前运行acceptance tests
)PHPUnit
构建套件的方式类似)广告。 2:假设我在acceptance
目录中有两个测试:
AbcCept.php
WebGuy.php
XyzCept.php
我希望能够在XyzCept.php
之前运行AbcCept.php
。这甚至可能吗?
并期待挑剔的评论:是的,我知道测试应该能够以任何顺序运行,而不是彼此依赖,但这不是我要求的。
答案 0 :(得分:7)
文件按名称排序(我假设我们正在讨论来自同一目录的文件)。换句话说,如果您需要在XyzCept.php
之前运行测试AbcCept.php
,请将XyzCept.php
重新命名为,AazCept.php
。
答案 1 :(得分:1)
对于那些正在寻求适当解决方案并遇到此问题的人。
我相信,您真正想要实现的是,特定测试先于其他测试进行。订单本身可能并不那么重要。为此,您可以将@dependency
批注添加到测试中。
完整的文档可以在这里找到:https://codeception.com/docs/07-AdvancedUsage#Dependencies。
示例:
class ModeratorCest {
public function login(AcceptanceTester $I)
{
// logs moderator in
}
/**
* @depends login
*/
public function banUser(AcceptanceTester $I)
{
// bans user
}
}
答案 2 :(得分:0)
您可以创建一个批处理脚本,以任意顺序运行测试,例如
cd \path\to\test\dir
codecept run unit
codecept run acceptance
或
cd \path\to\test\dir
codecept run unit
codecept run acceptance XycCept.php
codecept run acceptance AbcCept.php
请参见this page上的“运行”命令。
答案 3 :(得分:-1)
要选择特定套件,或指定运行不同测试套件的顺序,您可以使用以下语法(无空格):
codecept run unit,functional,acceptance