3

我有这个配置:

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

4

3 回答 3

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.php 结尾?
  • 所有测试用例类都扩展 PHPUnit_Framework_TestCase 吗?
  • 所有测试用例类名都以“Test”结尾吗?
于 2013-03-12T14:29:57.033 回答
1

PHPUnit 的后缀属性默认为“Test.php”,这可能不是很明显。如果您的测试不使用此后缀(例如,它使用 TestUser.php 或 /test/User.php,而不是 UserTest.php),则将跳过该测试。

如果您确定目标目录存在,请检查您的文件是否与 PHPUnit 使用的选定后缀匹配。

于 2016-07-13T20:12:44.467 回答
0

这可能有点取决于 Phpunit 的版本。

我可以让它与另外两个较旧的(3.7.22 和 3.7.38)一起工作,但之前有类似的问题。这是我的解决方案:

我首先配置的目录错误:

    <testsuites>
            <testsuite name="Default">
                    <directory>/tests</directory>
            </testsuite>
    </testsuites>

正如您在这个错误示例中所看到的,它以斜杠 (" /") 为前缀。删除该斜线会导致以下 XML 摘录可以正常工作:

    <testsuites>
            <testsuite name="Default">
                    <directory>tests</directory>
            </testsuite>
    </testsuites>

确保目录没有以斜杠为前缀并且它存在。存在部分至关重要,因为如果 Phpunit 测试运行程序不存在,它将不会显示错误消息。您只会看到没有执行任何测试。

未执行任何测试!


以您的问题为例:

  1. <directory>unit</directory>:它失败是因为目录不存在(你认为它存在,我知道,但是如果目录不存在它就会失败,Phpunit没有骗你)。
  2. <directory>unit/api/2</directory>: 如果失败,是因为目录不存在而失败(你认为是,我知道,但是如果目录不存在,它就失败了,Phpunit没有骗你)。
  3. <directory>unit/api/2/*</directory>: 这总是会失败,因为目录不存在。大多数文件系统不允许*在目录名和文件名中使用“”字符。
  4. <directory>unit/api/2/*Test.php</directory>: 同样的,这不是一个有效的目录名,因为目录不存在而失败。
  5. <directory suffix="Test.php">unit/api/2</directory>: 如果失败,是因为目录不存在而失败(你认为是,我知道,但是如果目录不存在,它就失败了,Phpunit没有骗你)。此外,值为“ ”的后缀Test.php参数是多余的,因为这是默认后缀。因为它是多余的,所以它是多余的,您应该将它从 XML 文件中删除。

没有软件是没有错误的,这自然也适用于 Phpunit,但你首先应该考虑到 Phpunit 并没有对你撒谎。

在更正目录配置后,我自己对记录的两个版本没有问题。你的旅费可能会改变。这特别适用于第 1、2 和 5 点:从您的问题看来,这些目录确实存在,但从您给出的描述以及我可以看到的 Phpunit 行为是什么,这些目录不存在。

第 3 点和第 4 点应该很清楚,它们根本不起作用,因为您将通配符放入目录名称中,该目录名称旨在描述具体路径,而不是暗示打算/允许使用通配符。您可以在之前的问答问题中找到这一点:尝试使用配置 XML 文件运行 Phpunit 会导致异常


此答案中的信息基于

  • Sebastian Bergmann 的 PHPUnit 3.7.22 和 3.7.38。
  • php.net 的 PHP 5.4.36
于 2015-05-25T09:01:26.230 回答