10

在多年编写普通的单元测试后,我才开始使用CodeceptionPHPUnit。困扰我的一件事是,我找不到一种方法来控制调用测试的顺序。

在纯旧PHPUnit的情况下,我像这样手动构建测试结构:

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

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

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

  1. 调用不同类型测试的顺序(即我想在unit tests之前运行acceptance tests
  2. 我想控制在特定测试类型中调用的测试顺序(以类似的方式PHPUnit构建套件)

广告。2:假设我在acceptance目录中有两个测试:

AbcCept.php
WebGuy.php
XyzCept.php

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

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

4

4 回答 4

8

文件按名称排序(我假设我们正在谈论来自同一目录的文件)。换句话说,如果您需要在重命名XyzCept.php之前运行测试,比如说.AbcCept.phpXyzCept.phpAazCept.php

于 2013-12-22T00:17:46.730 回答
1

您可以创建一个批处理脚本,以您喜欢的任何顺序运行测试,例如,

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

请参阅此页面上的“运行”命令。

于 2019-11-23T18:42:50.607 回答
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
    }
}
于 2020-07-28T18:15:04.660 回答
0

要选择特定套件,或指定运行不同测试套件的顺序,您可以使用以下语法(无空格):

codecept run unit,functional,acceptance
于 2021-02-26T14:55:25.347 回答