【问题标题】:Attempting to run PHPUnit with a configuration XML file results in exception尝试使用配置 XML 文件运行 PHPUnit 会导致异常
【发布时间】:2012-08-04 22:34:35
【问题描述】:

我正在尝试(很长一段时间,在 PHP 聊天室的小伙伴的帮助下)成功地将 PHPUnit 与 PhpStorm 集成。

我已将phpunit.xml 文件设置如下:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit
        backupGlobals               = "false"
        backupStaticAttributes      = "false"
        colors                      = "true"
        convertErrorsToExceptions   = "true"
        convertNoticesToExceptions  = "true"
        convertWarningsToExceptions = "true"
        processIsolation            = "false"
        stopOnFailure               = "false"
        syntaxCheck                 = "false"
        bootstrap                   = "bootstrap.php" >

    <testsuites>
        <testsuite name="Lamed Test Suite">
            <directory>Custom/*</directory>
        </testsuite>
    </testsuites>

</phpunit>

并成功配置 PHP Storm 以读取该文件。

问题是,我在运行测试时在 PhpStorm 的控制台中收到以下错误:

D:\Websites\php\php.exe C:\fakepath\ide-phpunit.php --bootstrap D:\Websites\htdocs\lamed\tests\boostrap.php --configuration D:\Websites\htdocs\lamed\tests\phpunit.xml
Testing started at 23:51 ...

Fatal error: Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "Lamed Test Suite.php" nor "Lamed Test Suite.php" could be opened.' in D:\Websites\php\pear\PHPUnit\Util\Skeleton\Test.php:100
Stack trace:
#0 D:\Websites\php\pear\PHPUnit\TextUI\Command.php(157): PHPUnit_Util_Skeleton_Test->__construct('Lamed Test Suit...', '')
#1 C:\Users\Dor\AppData\Local\Temp\ide-phpunit.php(95): PHPUnit_TextUI_Command->run(Array, true)
#2 C:\Users\Dor\AppData\Local\Temp\ide-phpunit.php(434): IDE_PHPUnit_TextUI_Command::main()
#3 {main}
  thrown in D:\Websites\php\pear\PHPUnit\Util\Skeleton\Test.php on line 100

Process finished with exit code 255

显然是从testsuite 元素的name= 属性中读取的。问题是,为什么?

更新

  • 我正在运行 Windows 7 x64 SP1 和 PHPStorm 4.0.3。 PHPUnit 版本是 3.6.12
  • 在 CLI 中键入 phpunit -c "D:\Websites\htdocs\lamed\tests\phpunit.xml" 实际上会得到相同的结果。
  • 我的Custom 目录与phpunit.xml 文件位于同一文件夹中。

我很困惑。任何形式的帮助都将不胜感激。

【问题讨论】:

  • 我会在重置我的大脑后再次查看这个。请注意,我是在 Linux 上开发的,而我刚刚意识到您是在 Windows 上开发的,尽管这并没有什么区别。
  • @Lusitanian 再想一想。我无法通过 Windows 7 上的配置文件运行任何 phpunit 测试。我还没有弄清楚。
  • @LeviMorrison 有趣。我没有 Windows 框...否则我会测试。
  • 你不需要配置它。 PHPStorm 为您处理,如果您需要设置自定义 XML 或引导文件,有一个选项:chat.stackoverflow.com/transcript/11?m=4825091#4825091
  • @hakre:看起来是这样!运行 phpunit -c "D:\Websites\htdocs\lamed\tests\phpunit.xml" 给了我同样的信息。

标签: phpunit integration phpstorm


【解决方案1】:

&lt;directory&gt; 元素中删除/*。此元素的文本内容应指向一个目录,而不是文件 glob。

<directory>Custom</directory>

有关指定单个文件和包含模式的更多详细信息,请参阅PHPUnit configuration documentation

默认情况下,所有以Test.php 结尾的文件(例如UserTest.php)都会被检查是否有测试用例。如果您有不同的命名约定,您可以切换或添加suffix 属性。例如,如果您将测试命名为 User.test.php,请使用:

<directory suffix=".test.php">Custom</directory>

【讨论】:

  • 失败了。抛出相同的异常。我看到了文档,甚至是他们的示例 XML,当复制/粘贴时给我同样的错误(只有它说 Object_FreezerObject/Freezer)。
  • @Truth 请注意,路径是相对于 xml 文件位置的。 Bzt 正如大卫所说,问题来自 phpunit 没有找到任何测试:)
  • phpunit.xml 文件是 Custom 目录的同级文件,我的测试在 Custom 中。
  • 文件名没有以Test结尾,一旦我这样做就解决了问题。谢谢你:)
  • 链接失效了,下面的链接是不是你2012年链接的那个页面? phpunit.de/manual/current/en/…
【解决方案2】:

您所经历的是一种后备。看起来您的测试套件是空的(也没有其他额外的非空测试套件)。

在这种情况下,PHPUnit 也会尝试打开一些合适的东西,但这是行不通的。然后你会看到一个错误。

  • 如果您只有一个空的测试套件,您将看到带有测试套件名称的异常,并添加了用于尝试的 php。

    Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "Empty-Testuite.php" nor "Empty-Testuite.php" could be opened.'
    
  • 如果您有多个空的测试套件并且没有可用的测试套件,您将只看到有关 php 的错误,没有添加名称。

    Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither ".php" nor ".php" could be opened.'
    
  • 如果您至少有一个工作测试套件但有一个或多个空测试套件,您将看到每个空测试套件的简短报告但没有错误:

    Empty test suite.
    

当我写下这是一个后备时,它一定不意味着这种行为是 PHPUnit 的意图。在您的案例中看到错误是可以的,因为在您开始测试之前,您至少需要运行一个。在您开始配置测试套件之前,同样如此。

修复测试缺失和错误消失的根本问题。

另一个答案中提到的通配符* - 即使我确信没有它是正确的 - 据我所知,它对您的问题没有任何作用。


此答案中的信息基于

  • Sebastian Bergmann 的 PHPUnit 3.6.7。
  • php.net 提供的 PHP 5.4.5

【讨论】:

  • 但是我在自定义文件夹中有一个测试用例,当我直接从 CLI 运行它时它可以工作。它应该被命名为任何特定的东西吗?
  • 是的,从 your screenshot in chat 你需要将文件从 lamed.php 重命名为 lamedTest.php 否则 PHPUnit 将无法识别它并且测试套件仍然是空的(我的答案中列表中的第一个案例)。
【解决方案3】:

遇到同样的问题,将目录的值更改为绝对路径而不是相对路径,并且它起作用了。 例如我改变了 测试 进入 C:\eclipse\Workspace\testweb

太糟糕了,我不得不阅读很多非信息,文档中没有提到这一点,也没有记录如何使用配置 xml 文件启动命令行界面。

phpunit -c 测试/all.xml

php 测试文件必须以 test 结尾,就像 myTest.php 一样,即使您正在添加文件元素 C:\eclipse\Workspace\testweb\tests\classes\something.php 行不通,但是 C:\eclipse\Workspace\testweb\tests\classes\somethingtest.php 会工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 2015-05-31
    相关资源
    最近更新 更多