有没有办法控制Codeception中的测试顺序?

时间:2013-12-21 18:07:39

标签: php phpunit codeception

我在普通PHPUnit编写单元测试多年后才开始使用Codeception。有一件事让我烦恼,我无法找到一种方法来控制调用测试的顺序。

在纯旧PHPUnit中,我正在手动构建测试结构:

$suite = new PHPUnit_Framework_TestSuite();
$suite->addTest('MyFirstTest');
$suite->addTest('MySecondTest');

并将按照添加到套件中的顺序调用测试。另一方面,Codeception似乎在遍历目录并运行它可以找到的每个测试。

我希望能够在两个级别上控制测试的顺序:

  1. 调用不同类型的测试的顺序(即我想在unit tests之前运行acceptance tests
  2. 我想控制在特定测试类型中调用的测试顺序(以PHPUnit构建套件的方式类似)
  3. 广告。 2:假设我在acceptance目录中有两个测试:

    AbcCept.php
    WebGuy.php
    XyzCept.php
    

    我希望能够在XyzCept.php之前运行AbcCept.php。这甚至可能吗?

    并期待挑剔的评论:是的,我知道测试应该能够以任何顺序运行,而不是彼此依赖,但这不是我要求的。

4 个答案:

答案 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