PHPUnit:按特定顺序执行testSuites


PHPUnit : Execute testSuites in specific order

我有一些testsuites(PHPUnit Selenium,PHPUnit),我想按特定顺序运行它们。所以我想运行"安装(硒驱动)"测试套件,然后运行"单元测试"测试套件。我知道我应该在单元测试中避免依赖性,但我的问题不是关于这一点(我使用的是一个有很多依赖性的旧应用程序,我需要安装并用selenium测试这个安装,然后运行单元测试,等等)

所以,我不需要为我的"测试用例"指定特定的顺序,这是可以的,但只适用于我的"试验套件"。这是我的phpunit.xml配置文件:

<phpunit backupGlobals="false">
    <selenium>
      <browser name="Firefox" browser="*firefox" timeout="600" />
    </selenium>
    <testsuites>
        <testsuite name="install (selenium driven)">
            <file>./_install.php</file>
            <exclude>./bin</exclude>
        </testsuite>
        <testsuite name="unit tests">
            <directory>./</directory>
            <exclude>./selenium</exclude>
        </testsuite>
    </testsuites>
</phpunit>

所以当我运行phpunit时,它似乎没有等待"install(selenium driven)"结果,所以"单元测试"失败了(MySQL错误,但没关系)。我该怎么处理?我想要两个单独的步骤:

  1. 运行"安装(硒驱动)"测试套件
  2. 运行"单元测试"测试套件

其他信息:

  • 我有很多testcase文件,所以我不想指定它们
  • 我知道我也应该避开backupGlobals=false,对不起,我不能:(
  • 我知道bootstrap选项,但我需要"测试"安装(所以它是一个测试套件)

如果你有线索的话,非常感谢!(我试图找到一个解决方案,但目前没有找到…)

Steven Scott关于使用一个批处理文件和两个配置文件的评论将是我所要做的。它遵循Unix的哲学,即使用简单的工具将简单的工具串在一起,而不是使用一个复杂的大工具来完成所有任务。

这里有一个替代方案,基于这样一种猜测,即"安装"不仅仅是进行功能测试,还设置单元测试所需的DB和其他设备。那么,将功能测试转移到单元测试套件中的setupBeforeClass()调用中如何呢。使用shell_exec()运行phpunit来运行功能测试,如果失败,则调用die或类似的方法,这样单元测试就不会运行。

附言:你听起来好像知道自己在做什么,但对于后来的人来说:当你有机会的时候,单元测试应该重构为使用mock DB,这样它们就可以首先频繁地运行。仍然保留现有的单元测试套件,但将其合并到功能测试套件中,因为听起来这就是它的归属。事实上(合并两个测试套件,然后到处使用显式@depends)是另一种方法。