我的pom.xml中有这个插件代码。如果我删除此插件,那么Maven将不会运行两次单元测试。我只是想知道这个插件的哪个部分使单元测试运行两次。
<plugin>
<groupId>com.atlassian.maven.plugins</groupId>
<artifactId>maven-clover2-plugin</artifactId>
<version>3.0.4</version>
<configuration>
<licenseLocation>/location/to/clover.license</licenseLocation>
<generateXml>true</generateXml>
<generateHtml>true</generateHtml>
</configuration>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>instrument</goal>
</goals>
</execution>
<execution>
<id>main</id>
<phase>verify</phase>
<goals>
<goal>instrument</goal>
<goal>aggregate</goal>
<goal>clover</goal>
</goals>
</execution>
<execution>
<id>site</id>
<phase>pre-site</phase>
<goals>
<goal>instrument</goal>
<goal>aggregate</goal>
</goals>
</execution>
</executions>
</plugin>
答案 0 :(得分:8)
clover插件使用已检测的类路径将生命周期分配到test
阶段。
您的标准生命周期将运行测试(通常在test
阶段使用surefire,但可能有多个执行或其他测试插件在该阶段调用测试)
然后三叶草出现并要求它们再次运行。
现在我的标准警告:
如果你只打开覆盖范围的测试用例,你就不能相信100%的通过率,因为覆盖可以掩盖错误
相反,如果您从未在启用覆盖范围的情况下运行,那么JVM体系结构中的任何更改都可以突出显示您不知道的新错误。
打开和不打开覆盖范围的测试通道=&gt;好吧
打开覆盖范围的测试通过,关闭时失败=&gt;小心,这里的错误
关闭覆盖范围的测试通过,打开时失败=&gt;如果测试不是时间关键那么bug就在这里,但是如果测试在生产环境中运行,那么bug只能在-server
完全优化热路径时显示
在启用和未启用覆盖范围的情况下测试失败=&gt;错误
“斯蒂芬的黄金法则:Just run the damn tests twice”
答案 1 :(得分:0)
clover2:您正在使用的仪器目标以这样的方式工作,即它会产生并行构建生命周期。由于这一点,在构建期间生成的所有工件(类,jar等)都放在/ target / clover目录中或者具有-clover.jar后缀。这可确保您将“普通”代码(即未检测的代码)与已检测的代码分开。
如果你不需要这样的分离(例如你运行“mvn test”而不是“mvn deploy”),那么我建议使用clover2:setup而不是clover2:instrument。
http://docs.atlassian.com/maven-clover2-plugin/latest/setup-mojo.html