尝试使用配置XML文件运行PHPUnit会导致异常

时间:2012-08-07 20:53:29

标签: phpunit integration phpstorm

我尝试(在PHP聊天室的fellas的帮助下很长一段时间)成功地将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风暴以从该文件中读取。

问题是,在运行测试时,我在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

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

更新

  • 我正在运行 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文件相同的文件夹中。

我感到困惑。希望得到任何帮助。

3 个答案:

答案 0 :(得分:10)

/*元素中删除<directory>。此元素的文本内容应指向目录 - 而不是文件glob。

<directory>Custom</directory>

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

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

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

答案 1 :(得分:1)

您体验的是后备。看起来你的测试套件是空的(并且没有其他额外的非空测试套件)。

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

  • 如果您只有一个空的测试套件,您将看到带有testsuite和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 5.4.5 by php.net
  •   

答案 2 :(得分:1)

如果同样的问题将目录的值更改为绝对路径而不是相对路径,则它会起作用。 比如我改变了 测试 成 C:\蚀\工作区\ testweb

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

phpunit -c tests / all.xml

即使你正在添加文件元素,php测试文件也必须像myTest.php一样以测试结束 C:\日食\工作区\ testweb \测试\类\ something.php 不会工作但是 C:\日食\工作区\ testweb \测试\类\ somethingtest.php 会工作

相关问题