我向捆绑包添加了一个简单的测试。
按照手册中的建议,我尝试让PHPUnit使用以下命令加载配置:
phpunit -c /appphpunit.xml看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<!-- http://www.phpunit.de/manual/current/en/appendixes.configuration.html -->
<phpunit
backupGlobals = "false"
backupStaticAttributes = "false"
colors = "true"
convertErrorsToExceptions = "true"
convertNoticesToExceptions = "true"
convertWarningsToExceptions = "true"
processIsolation = "false"
stopOnFailure = "false"
syntaxCheck = "false"
bootstrap = "bootstrap.php.cache" >
<testsuites>
<testsuite name="Project Test Suite">
<directory>../src/*Bundle/Tests</directory>
</testsuite>
</testsuites>
</phpunit> 我得到的错误消息是:
root@h0x03:/var/www/fi/FrontendIntegrator# phpunit -c app/
PHP Fatal error: Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "Project Test Suite.php" nor "Project Test Suite.php" could be opened.' in /usr/share/php/PHPUnit/Util/Skeleton/Test.php:102
Stack trace:
#0 /usr/share/php/PHPUnit/TextUI/Command.php(157): PHPUnit_Util_Skeleton_Test->__construct('Project Test Su...', '')
#1 /usr/share/php/PHPUnit/TextUI/Command.php(129): PHPUnit_TextUI_Command->run(Array, true)
#2 /usr/bin/phpunit(49): PHPUnit_TextUI_Command::main()
#3 {main}
thrown in /usr/share/php/PHPUnit/Util/Skeleton/Test.php on line 102PHPUnit显然会加载该文件,并尝试查找以测试套件名称命名的PHP文件。我找不到任何关于它为什么这样做或者这样的文件应该是什么样子的信息。
发布于 2011-09-26 18:30:39
看起来PHPUnit试图查找一个以testsuite-tag的名称属性命名的文件
如果找不到任何测试(命名错误或目录错误),则返回
发布于 2012-03-18 00:29:03
我今天在测试我的控制器时也遇到了同样的问题。因为PHPUnit找不到测试类,所以仅仅遵循书中的命令是行不通的。我设法找到了一个解决方法,只需指定您想要测试的测试文件,它就会工作。
phpunit -c app src/Acme/DemoBundle/Tests/Utility/CalculatorTest.php发布于 2014-05-14 05:02:25
我碰巧在我的包中有一个额外的目录级别。我用MyVendorName\MyProject\MyBundleNameBundle代替了MyVendorName\MyBundleNameBundle
在testsuites部分中,phpunit.xml.dist中的默认目录如下:
<testsuites>
<testsuite name="Project Test Suite">
<directory>../src/*/*Bundle/Tests</directory>
<directory>../src/*/Bundle/*Bundle/Tests</directory>
</testsuite>
</testsuites>但是没有一个与我的捆绑包名称空间匹配:Xmontero\Emperors\AdminBundle,它的测试依次位于目录src/Xmontero/Emperors/AdminBundle/Tests中。
此外,我的所有包都具有该语法,并且我删除了使用其他语法(如Acme\DemoBundle)的所有包。因此,phpunit没有找到任何测试。
我是这样解决的:在phpunit.xml.dist中,就在这条线下面
<directory>../src/*/*Bundle/Tests</directory>我添加了这一行
<directory>../src/*/*/*Bundle/Tests</directory>所以它是这样写的:
<testsuites>
<testsuite name="Project Test Suite">
<directory>../src/*/*Bundle/Tests</directory>
<directory>../src/*/*/*Bundle/Tests</directory>
<directory>../src/*/Bundle/*Bundle/Tests</directory>
</testsuite>
</testsuites>...and一切正常;)
-- 1天后编辑--
现在,当我运行phpunit -c app --coverage-html myNiceDir时,它给我提供了关于测试本身的覆盖率报告--当我希望它只给我提供被测系统的覆盖率时。
这是因为有一个遵循相同模式的whitelist,并且需要在exclude列表中添加一些内容:
它读到的地方是:
<exclude>
<directory>../src/*/*Bundle/Resources</directory>
<directory>../src/*/*Bundle/Tests</directory>
<directory>../src/*/Bundle/*Bundle/Resources</directory>
<directory>../src/*/Bundle/*Bundle/Tests</directory>
</exclude>我改成这样:
<exclude>
<directory>../src/*/*Bundle/Resources</directory>
<directory>../src/*/*/*Bundle/Resources</directory>
<directory>../src/*/*Bundle/Tests</directory>
<directory>../src/*/*/*Bundle/Tests</directory>
<directory>../src/*/Bundle/*Bundle/Resources</directory>
<directory>../src/*/Bundle/*Bundle/Tests</directory>
</exclude>我希望现在它是正确的;)
https://stackoverflow.com/questions/7553311
复制相似问题