从 PIT 执行中排除测试
Posted
技术标签:
【中文标题】从 PIT 执行中排除测试【英文标题】:Excluding tests from execution by PIT 【发布时间】:2018-07-06 09:56:56 【问题描述】:我必须将我的集成测试从 PIT 的执行中排除。从版本 1.3.0 开始有一个选项 excludedTestClasses
。我试图通过 PIT 的 Maven 插件的以下配置来通过这些测试。
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<version>1.3.1</version>
<configuration>
<verbose>true</verbose>
<mutationThreshold>80</mutationThreshold>
<targetClasses>
<param>de.comp.proj.*</param>
</targetClasses>
<excludedTestClasses>
<param>**/*IT.java</param>
</excludedTestClasses>
</configuration>
</plugin>
但是,PIT 仍在执行所有后缀为 IT
的测试。我看了看源,但在晚上迷路了;-)
那么,如何跳过集成测试?
【问题讨论】:
【参考方案1】:对于那些使用 Gradle 插件的人:
pitest
excludedTestClasses = ['de.comp.**.*IT']
【讨论】:
【参考方案2】:PIT 过滤器与已编译二进制文件中的类名匹配,而不是与源文件名匹配。
您的过滤器应该类似于
<excludedTestClasses>
<param>de.comp.**.*IT</param>
</excludedTestClasses>
de.comp.*IT
排除包de.comp
中的所有测试。使用de.comp.**.*IT
子包中的所有测试也会被忽略。
【讨论】:
我认为过滤器filenameToClassFilter()
删除了.java
。
我可以使用 de.com.**.*IT
之类的东西来排除特定子包下面的所有 IT 吗?我失败了**/*IT
。
要排除所有以IT
结尾的测试,我可以使用**.*IT
。【参考方案3】:
我使用 Pitest-maven 1.4.2 版。
这个配置对我来说很好用:
<excludedTestClasses>
<excludedTestClass>de.com.**.*IT</excludedTestClass>
</excludedTestClasses>
也许以下语法适用于旧版本的 Pitest-maven:
<excludedTestClasses>
<param>de.comp.**.*IT</param>
</excludedTestClasses>
【讨论】:
【参考方案4】:对于那些使用 Gradle 插件的人:
查看配置:http://pitest.org/quickstart/commandline/
pitest
excludedClasses = ['de.comp.**.*IT']
【讨论】:
以上是关于从 PIT 执行中排除测试的主要内容,如果未能解决你的问题,请参考以下文章
在测试执行 Maven Surefire 插件时排除日志跟踪
Android Gradle 插件TestOptions 配置 ⑤ ( Test 单元测试配置类 | 设置包含或排除单元测试 | 设置堆大小 | 设置测试前后执行的逻辑 )