Maven网站报告对于万无一失的测试很好,需要额外配置pitest mutationCoverage

时间:2016-06-14 12:26:55

标签: java maven pitest

如果我在<reporting>中设置pom部分,如下所示,我只收到了万无一失的报告,而pitest报告因为无法找到任何输入而失败。

  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <version>2.9</version>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-report-plugin</artifactId>
        <version>2.19.1</version>
      </plugin>
      <plugin>
        <groupId>org.pitest</groupId>
        <artifactId>pitest-maven</artifactId>
        <version>1.1.10</version>
        <configuration>
          <targetClasses>
            <param>pricingengine.*</param>
          </targetClasses>
          <targetTests>
            <param>pricingengine.*</param>
          </targetTests>
        </configuration>
        <reportSets>
          <reportSet>
            <reports>
              <report>report</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
    </plugins>
  </reporting>

要获取pitest报告的输入以便输出到网站报告,我需要先执行此操作:

mvn compile test-compile org.pitest:pitest-maven:mutationCoverage

我是否必须将<build>部分中的每一个设置为executions绑定到pre-site阶段的插件才能实现此目的?或者是否有一个更简单的解决方案与另一个我不知道的插件?

1 个答案:

答案 0 :(得分:1)

然而,maven-surefire-report-plugin表明它会调用默认生命周期的test目标。最糟糕的插件并不是。所以是的,您必须将pitest-maven插件添加到构建部分并将其绑定到生命周期阶段,即pre-site。我不建议为此目的使用站点生命周期,因为它不适用于长时间运行的分析任务,但这取决于您。

所以构建顺序是:

  • 构建生命周期
    • 构建模块(编译阶段)
    • 运行测试(测试阶段)
    • 运行突变覆盖(即在验证阶段)
  • 网站生命周期
    • pre-site(mutationCoverage);
    • 生成报告
    • 发布报告
    • ...

我建议使用个人资料,以便不会在每个版本上运行变异测试,您可以在需要时激活它(例如mvn site-P pit

<profile>
  <id>pit</id>
  <build>
    <plugins>
        <plugin>
            <groupId>org.pitest</groupId>
            <artifactId>pitest-maven</artifactId>
            <configuration>
                <targetClasses>
                    <param>pricingengine.*</param>
                </targetClasses>
                <targetTests>
                    <param>pricingengine.*</param>
                </targetTests>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>mutationCoverage</goal>
                    </goals>
                    <phase>pre-site</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
  </build>
</profile>