使用Cobertura Maven插件运行集成测试

时间:2010-02-02 22:22:14

标签: maven-2 integration-testing cobertura

我无法使用Cobertura插件在Maven中运行集成测试。我发现的这个问题最接近的答案是http://jira.codehaus.org/browse/MCOBERTURA-86。但是,这个问题仍然存在漏洞。我在03年4月3日尝试了Stevo建议的配置,它没有用。

我的POM

<reporting>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
            <version>2.3-SNAPSHOT</version>
            <reportSets>
            <reportSet>
                <reports>
                    <report>cobertura-integration</report>
                </reports>
            </reportSet>
            </reportSets>               
        </plugin>   
    </plugins>
</reporting>

这与Stevo提供的配置片段完全相同。

6 个答案:

答案 0 :(得分:7)

从我看来, cobertura maven插件有两大缺点。它有没有报告目标,所有单元测试将再次在surefire旁边运行。它仅为单元测试创​​建代码覆盖率

我现在正在使用 JaCoCo maven插件。 JaCoCo 重用surefire和/或故障安全报告,以便从单元和/或集成测试中创建代码覆盖率。此外,JaCoCo有一个良好的Jenkins集成。以下是JaCoCo使用surefire单元测试和故障安全集成测试的示例。

    <build>
    <plugins>
        <!-- Unit tests -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.16</version>
        </plugin>

        <!-- Integration tests -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.16</version>
            <executions>
                <execution>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

        <!--
            The JaCoCo plugin generates a report about the test coverage. In contrast to the cobertura plugin
            JaCoCo can be configured to generate code coverage for integration tests. Another advantage of JaCoCo
            is that it reports only, cobertura executes all unit tests again (beside the surefire plugin).
        -->
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.6.4.201312101107</version>
            <executions>
                <execution>
                    <id>jacoco-prepare-agent</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>jacoco-prepare-agent-integration</id>
                    <goals>
                        <goal>prepare-agent-integration</goal>
                    </goals>
                </execution>
                <execution>
                    <id>jacoco-report</id>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
                <execution>
                    <id>jacoco-integration</id>
                    <goals>
                        <goal>report-integration</goal>
                    </goals>
                </execution>
                <execution>
                    <id>jacoco-check</id>
                    <goals>
                        <goal>check</goal>
                    </goals>
                    <configuration>
                        <rules />
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

答案 1 :(得分:3)

尝试为该插件配置执行阶段,如

 <build>
   <plugins>
     <plugin>
       <groupId>org.codehaus.mojo</groupId>
         <artifactId>cobertura-maven-plugin</artifactId>
         <version>2.5.1</version>
         <configuration>
           <formats>
             <format>xml</format>
           </formats>
         </configuration>
         <executions>
           <execution>
             <id>cobertura-check</id>
             <phase>verify</phase>
             <goals>
               <goal>cobertura</goal>
             </goals>
           </execution>
         </executions>
       </plugin>

这样对我来说就像是一种魅力。

答案 2 :(得分:2)

经过一些研究发现http://jira.codehaus.org/browse/MCOBERTURA-86列出了工作配置 请务必使用

调用此方法
 mvn clean deploy -PbuildWithIntegrationTestCoverage

        <profile>
        <!-- Build with IntegrationTestcoverage => instrument classes with cobertura before integrationtests starts. -->
        <id>buildWithIntegrationTestCoverage</id>
        <activation>
            <property>
                <name>buildWithIntegrationTestCoverage</name>
                <value>true</value>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>cobertura-maven-plugin</artifactId>
                    <version>2.5.2</version>
                    <executions>
                        <execution>
                            <id>instrument-classes</id>
                            <phase>package</phase>
                            <goals>
                                <goal>instrument</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <!-- Add cobertura as dependency to the jetty-plugin (required for instrumented classes) -->
                <plugin>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>maven-jetty-plugin</artifactId>
                    <dependencies>
                        <dependency>
                            <groupId>org.codehaus.mojo</groupId>
                            <artifactId>cobertura-maven-plugin</artifactId>
                            <version>2.5.2</version>
                            <type>jar</type>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </build>
    </profile>

答案 3 :(得分:2)

对于任何在2015年发布的谷歌 - cobertura-maven-plugin started supporting integration tests in version 2.7上绊倒这个问题的人。

引用他们的网站:

  

最高版本2.6只有一份报告:cobertura,   它为您提供了单元测试的覆盖率报告。既然有   只有一个,你没有必要以任何方式配置它。

     

从2.7版开始,添加了一个新报告:   cobertura-integration-test,它为您提供覆盖率报告   集成测试。 [..]

     

默认情况下启用两个报告。如果你想要旧的行为   如果只有单元测试的覆盖率报告,则需要进行配置   插件...

如果您像我一样使用mvn cobertura:cobertura运行cobertura报告,您还需要mvn cobertura:cobertura-integration-test进行集成测试。您可以查看其manual page

中的详细信息

答案 4 :(得分:0)

我发现使用maven-antrun-plugin进行多模块项目(包括集成和UI测试)是最佳解决方案。我使用this post来实现Ant目标并从那里开始。我们现在每个模块都有代码覆盖率报告,并合并了一个包含所有测试覆盖率的报告。

答案 5 :(得分:-2)

通过配置maven-failsafe-plugin在test阶段运行,我得到了使用Maven 3.0.3和cobertura-maven-plugin 2.5.1的集成测试:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.12</version>
    <executions>
        <execution>
            <phase>test</phase>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
</plugin>