PHPUnit中的测试用例执行顺序

时间:2014-04-03 10:57:47

标签: php phpunit

我已经定义了需要在phpunit.xml中按顺序执行的测试文件列表。

根据http://phpunit.de/manual/3.7/en/organizing-tests.html#organizing-tests.xml-configuration,提到测试用例的顺序可以定义为:

<phpunit>
  <testsuites>
    <testsuite name="Object_Freezer">
      <file>Tests/Freezer/HashGenerator/NonRecursiveSHA1Test.php</file>
      <file>Tests/Freezer/IdGenerator/UUIDTest.php</file>
      <file>Tests/Freezer/UtilTest.php</file>
      <file>Tests/FreezerTest.php</file>
      <file>Tests/Freezer/StorageTest.php</file>
      <file>Tests/Freezer/Storage/CouchDB/WithLazyLoadTest.php</file>
      <file>Tests/Freezer/Storage/CouchDB/WithoutLazyLoadTest.php</file>
    </testsuite>
  </testsuites>
</phpunit>

但似乎PHPUnit忽略了phpunit.xml中的配置并按字母顺序执行测试用例。

我想定义顺序只是因为我希望我的一个测试用例最后执行。 以下是我的代码:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit 
    colors="true" 
    stopOnFailure="false" 
    forceCoversAnnotation="true"
    bootstrap="../application/third_party/CIUnit/bootstrap_phpunit.php">
    <testsuites>
        <testsuite name="ModelTests">
            <directory suffix=".php">models</directory>
            <file>./models/aa.php</file>
            <file>./models/bb.php</file>
            <file>./models/cc.php</file>
            <file>./models/dd.php</file>
            <file>./models/ab.php</file>
            <file>./models/ac.php</file>
        </testsuite>
    </testsuites>
    <filter>
    <whitelist addUncoveredFilesFromWhitelist="true">
        <directory suffix=".php">models</directory>
    </whitelist>
    </filter>
</phpunit>

当我执行phpunit时,它打印: 配置读自/var/www/builds/latest/tests/phpunit.xml

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

你需要告诉phpunit使用测试套件,以便它以正确的顺序运行测试。我猜你只是使用phpunit .或类似的东西来运行测试。在这种情况下,PHPUnit会加载测试并以非常随机的方式运行它们。为了使用您指定的顺序,您需要执行phpunit --testsuite ModelTest这告诉PHPUnit使用套件中指定的顺序。

但是,它也只会运行XML中列出的测试,因此请确保您的列表是全面的。

此外,正如评论中的链接答案所述,要求您的测试按特定顺序运行并不是理想的情况。您应该尝试更改设计或测试,以免依赖于按特定顺序运行。