Php 有没有办法控制Codeception中的测试顺序?
我在用纯Php 有没有办法控制Codeception中的测试顺序?,php,phpunit,codeception,Php,Phpunit,Codeception,我在用纯PHPUnit编写单元测试多年后才开始使用。有一件事困扰着我,那就是我找不到控制调用测试顺序的方法 在纯旧的PHPUnit中,我手动构建测试结构,如下所示: $suite = new PHPUnit_Framework_TestSuite(); $suite->addTest('MyFirstTest'); $suite->addTest('MySecondTest'); 测试将按照它们添加到套件中的顺序调用Codeception似乎正在遍历目录并运行它能找到的每个测试 我
PHPUnit
编写单元测试多年后才开始使用。有一件事困扰着我,那就是我找不到控制调用测试顺序的方法
在纯旧的PHPUnit
中,我手动构建测试结构,如下所示:
$suite = new PHPUnit_Framework_TestSuite();
$suite->addTest('MyFirstTest');
$suite->addTest('MySecondTest');
测试将按照它们添加到套件中的顺序调用<另一方面,code>Codeception似乎正在遍历目录并运行它能找到的每个测试
我希望能够在两个层面上控制测试顺序:
验收测试之前运行单元测试
)
PHPUnit
builds套件)验收
目录中有两个测试:
AbcCept.php
WebGuy.php
XyzCept.php
我希望能够在abaccept.php
之前运行XyzCept.php
。这可能吗
为了预测挑剔的评论:是的,我知道测试应该能够以任何顺序运行,而不是相互依赖,但这不是我要问的。文件按名称排序(我假设我们讨论的是来自同一目录的文件)。换句话说,如果您需要在
abaccept.php
之前运行测试XyzCept.php
,您可以将XyzCept.php
重新命名为AazCept.php
,您可以创建一个批处理脚本,以任意顺序运行测试,例如
cd \path\to\test\dir
codecept run unit
codecept run acceptance
或
请参阅上的“运行”命令。了解正在搜索适当解决方案并遇到此问题的人。
我相信,您真正想要实现的是,在另一个测试之前运行一个特定的测试。秩序本身可能并不那么重要。为此,您可以将
@dependency
注释添加到测试中。完整文档可在此处找到:。 例如:
要选择特定套件,或指定运行不同测试套件的顺序,可以使用以下语法(无空格):
好的,谢谢。这是很明显的。实际上,我现在正在对它们进行数字排序(通过添加前缀
001
,002
等)。但是对于复杂的目录结构,单元测试类位于名称空间(PSR-0)中,如何处理呢?所有文件都按其全名排序,即路径+文件名。请注意,一些测试将调用自己的批处理文件。在这种情况下,进程可能不会返回批处理脚本,因此列表中的某些测试可能无法运行。如果出现这种情况,请使用“call”而不是“run”。这在Codeception验收测试中对我不起作用。这很奇怪,可能尝试运行上面的示例?这可能会告诉我们登录先运行,但我们无法知道@depends是否有任何影响。我的情况可能因为同时使用@example注释而变得复杂。我刚刚重新阅读了使用@depends注释的文档。我不相信它控制着方法的执行顺序。它所做的是防止依赖测试在其依赖的测试失败时运行。所以在上面的例子中,如果登录(0)测试失败,banUser()测试将永远不会执行。我同意当登录()测试失败时,它将阻止banUser()运行,但为了知道这个测试是否成功,应该执行它,对吗?否则就无法判断测试是否失败。关于suffle()config属性的文档告诉您,除了那些具有依赖关系的测试之外,测试将被洗牌。
cd \path\to\test\dir
codecept run unit
codecept run acceptance XycCept.php
codecept run acceptance AbcCept.php
class ModeratorCest {
public function login(AcceptanceTester $I)
{
// logs moderator in
}
/**
* @depends login
*/
public function banUser(AcceptanceTester $I)
{
// bans user
}
}
codecept run unit,functional,acceptance