2015-02-09 36 views
0

我有一个项目使用jacoco版本0.7.1.201405082137和maven 3.0.5。在项目中,我有一些单元测试,还有一些使用arquillian创建的测试。使用jacoco和maven获取错误的覆盖率数据

为了区分单元测试和集成测试,我创建了两个junit类:一个叫做FastTest,另一个叫SlowTest。

在,我用它来运行所有测试Maven的配置文件我已经完成了这个插件:

<plugin> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.17</version> 
    <configuration> 
    <groups>SlowTest,FastTest</groups> 
    <systemPropertyVariables> 
     <arquillian.launch>wildfly_8_x</arquillian.launch> 
    </systemPropertyVariables> 
    </configuration> 
</plugin> 
<plugin> 
    <groupId>org.jacoco</groupId> 
    <artifactId>jacoco-maven-plugin</artifactId> 
    <version>${version.jacoco}</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>prepare-agent</goal> 
      </goals> 
    </execution> 
    <execution> 
     <id>report</id> 
     <phase>prepare-package</phase> 
     <goals> 
     <goal>report</goal> 
     </goals> 
    </execution> 
</executions> 

当我离开这两个类别中我只得到了覆盖与SlowTest注释的测试。但所有的测试运行。如果我只运行用FastTest注释的那些,我也会得到它们的正确覆盖率。

如何在运行两种测试时设置jacoco以获得正确的覆盖范围?

回答

0

小提示:

  • <groups>标签充分的类名。所以我的问题是:将SlowTest.class接口放置在默认包中?如果没有,你应该提供完整的路径,某事像:<groups>com.mycompany.project.SlowTest</groups>

和小建议:

  • 良好做法是区分单元测试和集成测试 - 从而分开运行。 Maven通过两个插件实现了这一点:maven-surefire-pluginmaven-failsafe-plugin
    首先设计用于运行mvn test的单元测试。
    其次是设计用于运行您的集成测试mvn failsafe:integration-test
    answer可能是有用的,以摆脱一些光。
+0

是的,中的类有完整的包。我尝试了故障安全插件,但没有什么区别。我的单元测试使用powermock,我相信这是问题,因为powermock必须更改类。 – 2015-02-10 09:34:12

+0

@KellyGoedert事实上,它可能是。就我个人而言,我发现'PowerMock'总是会造成比它更值钱的麻烦。真。它的黑客,像改变一个类加载器可能是非常有问题的。这只是冰山的一个顶峰。 – 2015-02-10 09:42:24

+0

我同意你的意见。可悲的是,对于我来说,我无法改变让我使用Powermock进行测试的类。 – 2015-02-10 09:45:27

相关问题