PHPUnit TestSuite Exclude

2022-08-30 22:11:50

所以我想从我的Testsuite中排除一个directoy,就像这样:

<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版本I测试了3.7.21和3.7.28。


答案 1

我在我的Symfony演示项目上测试了它(这表明这是你正在使用的),我有同样的问题。这似乎是两个问题的结合。首先,运行 PHPUnit (PHPUnit 3.7.19) 时有一个已知的 bug,其中包含 or 选项:Bundles-c--config

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

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

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

<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>

这是我发现根据需要排除测试的唯一方法。通球对 .但是,这意味着您必须添加任意数量的指令,因为存在要忽略的文件夹。MyBundleexcludeexclude

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

[...]此修复程序在 4.0 版本中出现,因为它会破坏向后兼容性。

  • 解决方案#1:删除路径中的任何球状物
  • 解决方案#2:升级到PHPUnit v4.*(我自己没有测试过,请参阅评论,不能解决通配的路径问题)exclude

答案 2

刚刚遇到了类似的问题,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

推荐