为什么PHPUnit试图找到一个名为testsuite的文件?

jch*_*hes 7 php testing phpunit unit-testing

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

<phpunit ...>
    <testsuites>
        <testsuite name="MyTests">
            <directory>../path/to/some/tests</directory>
        </testsuite>
    </testsuites>
    ... // more settings for <filter> and <logging>
</phpunit>
Run Code Online (Sandbox Code Playgroud)

当我去运行它时,我收到此错误:

PHP fatal error: Uncaught exception 'PHPUnit_Framework_Exception'
with message 'Neither "MyTests.php" nor "MyTests.php" could be opened.'
Run Code Online (Sandbox Code Playgroud)

为什么PHPUnit会给我这个错误,如果我给它一个查找测试的目录,它为什么要查找"MyTests.php"?

在相关的说明中,当我<testsuite>使用其他测试添加更多条目时,PHPUnit运行时没有错误.那是怎么回事?

jch*_*hes 5

默认情况下,PHPUnit将添加" 文件*Test中找到的所有类*Test.php"(请参阅PHPUnit文档).如果找不到与该描述匹配的任何文件(例如,SomeTest.php定义SomeTest类的文件),则它会回退到基于测试套件的name属性查找文件.

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

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

现在您应该能够正常运行phpunit:

$ phpunit
PHPUnit 3.5.14 by Sebastian Bergmann.

.

Time: 0 seconds, Memory: 10.75Mb

OK (1 test, 0 assertions)
Run Code Online (Sandbox Code Playgroud)

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