【问题标题】:why does PHPUnit try to find a file with the name of the testsuite?为什么 PHPUnit 会尝试查找具有测试套件名称的文件?
【发布时间】:2011-10-26 03:02:41
【问题描述】:

我的 phpunit.xml 文件中有这个:

<phpunit ...>
    <testsuites>
        <testsuite name="MyTests">
            <directory>../path/to/some/tests</directory>
        </testsuite>
    </testsuites>
    ... // more settings for <filter> and <logging>
</phpunit>

当我去运行它时,我得到了这个错误:

PHP fatal error: Uncaught exception 'PHPUnit_Framework_Exception'
with message 'Neither "MyTests.php" nor "MyTests.php" could be opened.'

为什么 PHPUnit 会给我这个错误,如果我给它一个目录来查找测试,为什么它会寻找“MyTests.php”?

在相关说明中,当我在其他测试中添加更多 &lt;testsuite&gt; 条目时,PHPUnit 运行时不会出错。这是怎么回事?

【问题讨论】:

    标签: php unit-testing testing phpunit


    【解决方案1】:

    默认情况下,PHPUnit 将添加“在*Test.php 文件中找到的所有*Test 类”(参见PHPUnit docs)。如果它没有找到与该描述匹配的任何文件(例如,定义 SomeTest 类的 SomeTest.php 文件),它会回退到基于测试套件的名称属性查找文件。

    解决方案是创建一个与该描述匹配的文件,以便 PHPUnit 不会退回到其默认的按测试套件名称搜索:

    <?php
    // in ../path/to/some/tests/SomeTest.php:
    class SomeTest extends PHPUnit_Framework_TestCase {
        public function test() {
            //... test cases here
        }
    }
    ?>
    

    现在您应该可以运行phpunit 而不出现错误:

    $ phpunit
    PHPUnit 3.5.14 by Sebastian Bergmann.
    
    .
    
    Time: 0 seconds, Memory: 10.75Mb
    
    OK (1 test, 0 assertions)
    

    如果 PHPUnit 能够找到匹配的测试用例以在其他套件下运行,则添加更多 testsuite 条目时它将正常工作。如果它找到要在任何测试套件中运行的测试,它不会求助于通过 name 属性搜索它找不到任何东西的套件。

    【讨论】:

      【解决方案2】:

      我认为问题在于您没有告诉它哪些文件包含您要运行的测试用例和/或套件。尝试添加suffix="Test.php" 属性。

      <testsuite name="MyTests">
          <directory suffix="Test.php">../path/to/some/tests</directory>
      </testsuite>
      

      【讨论】:

      • 默认后缀好像是“Test.php”;当没有与后缀匹配的文件时,它开始寻找具有name 属性中给出的名称的文件。很有趣。
      • 大声笑,我假设你实际上有一些测试要运行,并寻找与我的文件相比可能不同的地方。 :) 很高兴知道从现在开始我可以省略后缀。
      猜你喜欢
      • 2014-09-21
      • 2016-05-24
      • 2018-06-10
      • 2012-05-16
      • 2011-11-10
      • 2016-04-16
      • 2022-11-01
      • 2011-07-27
      • 1970-01-01
      相关资源
      最近更新 更多