9

我正在尝试(很长一段时间,在 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

显然是从元素的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

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

4

3 回答 3

10

/*<directory>元素中删除。这个元素的文本内容应该指向一个目录——而不是一个文件 glob。

<directory>Custom</directory>

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

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

<directory suffix=".test.php">Custom</directory>
于 2012-08-08T07:07:49.753 回答
1

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

在这种情况下,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
于 2012-08-08T15:17:28.463 回答
1

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

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

phpunit -c 测试/all.xml

即使您添加文件元素 C:\eclipse\Workspace\testweb\tests\classes\something.php 不起作用但 C:\eclipse\Workspace\ testweb\tests\classes\somethingtest.php 会工作

于 2012-09-02T14:26:42.633 回答