我尝试(在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
属性中读取了该内容。问题是,为什么?
phpunit -c "D:\Websites\htdocs\lamed\tests\phpunit.xml"
实际上会产生相同的结果。Custom
目录位于与phpunit.xml
文件相同的文件夹中。我感到困惑。希望得到任何帮助。
答案 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 会工作