从 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 执行中排除测试的主要内容,如果未能解决你的问题,请参考以下文章

从ng测试命令中排除量角器文件

XCode TestPlan:从命令行指定要使用的配置

在测试执行 Maven Surefire 插件时排除日志跟踪

如何从批处理执行中排除文件?

JUnit 测试通过但 PIT 说套件不是绿色的

Android Gradle 插件TestOptions 配置 ⑤ ( Test 单元测试配置类 | 设置包含或排除单元测试 | 设置堆大小 | 设置测试前后执行的逻辑 )