PHPUnit TestSuite排除

时间:2014-03-25 20:52:16

标签: php unit-testing phpunit

所以我想从我的Testsuite中排除一个直接导演:

<testsuite name="PHPUnitWillKillMe">   
    <directory>src/*/Bundle/*/*Bundle/Tests</directory>
    <exclude>src/*/Bundle/*/*Bundle/Tests/Controller/</exclude>
</testsuite>   

应测试控制器以外的所有内容。

事情是,它不起作用。当我运行时,PHPUnit仍在src / / Bundle / / * Bundle / Tests / Controller /中运行所有测试

 phpunit --testsuite PHPUnitWillKillMe

有什么想法吗?

最诚挚的问候!

我试过的PHPUnit版本是3.7.21和3.7.28。

2 个答案:

答案 0 :(得分:9)

我在我的Symfony演示项目上测试过它(Bundles表明这是你正在使用的)并且我有同样的问题。这似乎是两个问题的组合。首先,使用-c--config选项运行PHPUnit(PHPUnit 3.7.19)存在一个已知错误:

https://github.com/sebastianbergmann/phpunit/issues/928

  

在其他地方运行并使用--config指定配置文件时,排除将停止工作。

其次,exclude指令在路径中存在任何globbing(*)时似乎忽略/失败,因此通过删除globbing,它对我有用:

<testsuites>
    <testsuite name="Project Test Suite">
        <directory>../src/*/*Bundle/Tests</directory>
        <directory>../src/*/Bundle/*Bundle/Tests</directory>
        <exclude>../src/Blah/MyBundle/Tests/Controller/</exclude>
    </testsuite>
</testsuites>

我发现这是唯一方式,可以根据需要排除MyBundle中的测试。对于exclude,全局操作 不起作用。但是,这意味着您必须添加尽可能多的exclude指令,因为您要忽略的文件夹。

可能相关的gihub问题: https://github.com/sebastianbergmann/phpunit/pull/573

  

[...]此修复程序登陆4.0版本,因为它打破了向后兼容性。

  • 解决方案#1:删除路径中的任何通配
  • 解决方案#2:升级到PHPUnit v4。*(未经我自己测试,请参阅注释,并未解决带有globbing的exclude路径问题)

答案 1 :(得分:5)

刚出现类似问题,phpunit对群组有很好的支持:

...
--filter <pattern>       Filter which tests to run.
--group ...              Only runs tests from the specified group(s).
--exclude-group ...      Exclude tests from the specified group(s).
--list-groups            List available test groups.
...

你做的是

/**
 * @group nonRunnableGroupName
 */
public function testSomething()
{ /* test here */ }

运行测试

$ phpunit -c /src --exclude-group nonRunnableGroupName