phpunit没有找到导演xml标签的任何测试,但是(某些)文件标签

时间:2013-03-06 14:08:07

标签: php phpunit

我有这个配置:

<?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

3 个答案:

答案 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

如果没有进行任何测试,请回答以下问题:

  • 也许你的测试用例中的方法不是以'test'开头的?
  • 所有测试用例文件是否以Test.php结束?
  • 是否所有测试用例类都扩展了PHPUnit_Framework_TestCase?
  • 所有testcase类名都以'Test'结尾吗?

答案 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错误消息。您只会看到没有执行任何测试。

  

没有执行测试!

以你的问题为例:

  1. <directory>unit</directory>:它失败了,因为目录不存在(你知道它确实存在,但如果目录不存在则会失败,Phpunit 对你撒谎)
  2. <directory>unit/api/2</directory>:如果失败,则失败,因为该目录不存在(我认为它确实存在,但如果目录不存在则失败,Phpunit 骗你)。
  3. <directory>unit/api/2/*</directory>:这将始终失败,因为该目录不存在。大多数文件系统不允许使用&#34; *&#34;目录和文件名中的字符。
  4. <directory>unit/api/2/*Test.php</directory>:此处相同,这不是有效的目录名称,因为目录不存在而失败。
  5. <directory suffix="Test.php">unit/api/2</directory>:如果失败,则失败,因为该目录不存在(我认为它确实存在,但如果目录不存在则失败,Phpunit 对你说谎。此外,后缀参数的值为&#34; Test.php&#34;是多余的,因为这是默认后缀。因为它是多余的,所以这是残酷的,你应该从XML文件中删除它。
  6. 没有软件没有错误,这自然也适用于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
    •