我有这个配置:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
backupGlobals = "false"
backupStaticAttributes = "false"
colors = "false"
convertErrorsToExceptions = "true"
convertNoticesToExceptions = "true"
convertWarningsToExceptions = "true"
processIsolation = "false"
stopOnFailure = "false"
stopOnError = "false"
stopOnIncomplete = "false"
syntaxCheck = "false"
bootstrap = "test_bootstrap.php"
>
<testsuites>
<testsuite name="UnitTests">
<file>unit/api/2/ApiControllerTest.php</file>
<file>unit/api/2/RoutesTest.php</file>
</testsuite>
它运行测试文件。如果我用
替换文件<directory>unit</directory>
// or
<directory>unit/api/2</directory>
// or
<directory>unit/api/2/*</directory>
// or
<directory>unit/api/2/*Test.php</directory>
// or
<directory suffix="Test.php">unit/api/2</directory>
它只是说:没有执行测试!
拜托,可能出错了?
Ubuntu 12.04 LTS,php 5.3.10,phpunit 3.7.16
答案 0 :(得分:2)
相对于unit
目录的路径在哪里是phpunit.xml文件?
如果您的路径看起来像这样:
projectroot
|- phpunit.xml
|- unit/
|- api/
您可以尝试在phpunit.xml
:
<directory>./unit</directory>
然后从root运行phpunit,如下所示:phpunit -c phpunit.xml
如果这不起作用,则其他错误。如果你运行它会发生什么:
phpunit ./unit/api/2
如果没有进行任何测试,请回答以下问题:
答案 1 :(得分:1)
PHPUnit的后缀属性默认为“Test.php”,这可能不会立即显而易见。如果您的测试不使用此后缀(例如,它使用TestUser.php或/test/User.php而不是UserTest.php),则将跳过测试。
如果您确定目标目录存在,请检查您的文件是否与PHPUnit使用的选定后缀匹配。
答案 2 :(得分:0)
这可能取决于Phpunit的版本。
我可以让它与两个更老的(3.7.22和3.7.38)一起工作,但之前有类似的问题。这是我的解决方案:
我首先配置了错误的目录:
<testsuites>
<testsuite name="Default">
<directory>/tests</directory>
</testsuite>
</testsuites>
正如你在这个错误的例子中看到的那样,它的前缀是斜杠(&#34; /
&#34;)。删除该斜杠会导致以下XML摘录正常工作:
<testsuites>
<testsuite name="Default">
<directory>tests</directory>
</testsuite>
</testsuites>
确保目录没有斜杠前缀并且存在。存在部分是至关重要的,因为Phpunit testrunner如果不存在则不会显示na错误消息。您只会看到没有执行任何测试。
没有执行测试!
以你的问题为例:
<directory>unit</directory>
:它失败了,因为目录不存在(你知道它确实存在,但如果目录不存在则会失败,Phpunit 不对你撒谎) <directory>unit/api/2</directory>
:如果失败,则失败,因为该目录不存在(我认为它确实存在,但如果目录不存在则失败,Phpunit 不骗你)。<directory>unit/api/2/*</directory>
:这将始终失败,因为该目录不存在。大多数文件系统不允许使用&#34; *
&#34;目录和文件名中的字符。<directory>unit/api/2/*Test.php</directory>
:此处相同,这不是有效的目录名称,因为目录不存在而失败。<directory suffix="Test.php">unit/api/2</directory>
:如果失败,则失败,因为该目录不存在(我认为它确实存在,但如果目录不存在则失败,Phpunit 不对你说谎。此外,后缀参数的值为&#34; Test.php
&#34;是多余的,因为这是默认后缀。因为它是多余的,所以这是残酷的,你应该从XML文件中删除它。没有软件没有错误,这自然也适用于Phpunit,但你首先应该考虑到Phpunit不会在一开始就骗你。
在我更正目录配置后,我自己对两个版本的文档没有问题。你的旅费可能会改变。这特别适用于第1点,第2点和第5点:从您的问题看起来这些目录确实存在,但从您给出的描述以及我可以看到的Phpunit行为是什么,这些目录不存在。
第3点和第4点应该是清楚的,它们根本不起作用,因为你将通配符放在目录名中,这意味着描述一条不暗示通配符用法是意图/允许的具体路径。您可以在之前的问答中找到这一点:Attempting to run Phpunit with a configuration XML file results in exception。
此答案中的信息基于
- Sebastian Bergmann的PHPUnit 3.7.22和3.7.38。
- PHP 5.4.36 by php.net