【问题标题】:Cobertura and JettyCobertura 和码头
【发布时间】:2011-12-23 12:14:24
【问题描述】:

我正在尝试使用 cobertura 在 Jetty 上运行我的 web 应用程序时获取覆盖率报告。 我们已经使用 surefire 插件运行了 cobertura 进行单元测试。 我们还为运行集成测试配置了故障安全插件。

我已经(手动)装备了我的战争并部署了它。

当使用仅集成测试配置文件运行mvn verify 时,cobertura 似乎正在工作,因为我在 Eclipse 控制台(我正在从那里运行码头)中收到各种新警告,可能是因为字节码已被 cobertura 更改。 但即使在码头服务器上调用"stop" 时,我也没有写入.ser 文件。

我在运行mvn cobertura:cobertura 时确实得到了一个.ser 文件,并且在我的webapp 的target/site 目录下生成了一个报告。该报告显示 0% 的覆盖率,因为 cobertura:cobertura 没有运行任何测试。

如何使用故障保护使 cobertura 运行我的集成测试? 还有其他建议吗?

谢谢, 本

【问题讨论】:

    标签: java maven integration-testing code-coverage cobertura


    【解决方案1】:

    我通过使用cobertura-it 插件解决了这个问题。它扩展了原始的 cobertura 插件并允许使用仅报告目标。此外,我必须运行两个单独的命令(见下文)来测试和生成报告(合并到 1 个命令不起作用)。这是我的插件配置。

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-it-maven-plugin</artifactId>
        <version>2.5</version>
        <configuration>
            <formats>
                <format>html</format>
            </formats>
            <check>
                <haltOnFailure>false</haltOnFailure>
            </check>
        </configuration>
        <executions>
            <execution>
                <id>pre-integration-test</id>
                <phase>pre-integration-test</phase>
                <goals>
                    <goal>cobertura</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    <plugin>            
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>7.4.2.v20110526</version>
        <configuration>
            <stopKey>aaaaaaaaaaaaa</stopKey>
            <stopPort>8085</stopPort>
        </configuration>
        <executions>
            <execution>
                <id>start-jetty</id>
                <phase>pre-integration-test</phase>
                <goals>
                    <goal>run</goal>
                </goals>
                <configuration>
                    <scanIntervalSeconds>0</scanIntervalSeconds>
                    <daemon>true</daemon>
                    <classesDirectory>target/generated-classes/cobertura</classesDirectory>
                </configuration>
            </execution>
            <execution>
                <id>stop-jetty</id>
                <phase>post-integration-test</phase>
                <goals>
                    <goal>stop</goal>
                </goals>
            </execution>
        </executions>
        <dependencies>
            <dependency>
                <groupId>net.sourceforge.cobertura</groupId>
                <artifactId>cobertura</artifactId>
                <version>1.9.4.1</version>
            </dependency>
        </dependencies>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>2.10</version>
        <executions>
            <execution>
                  <id>integration-test</id>
                  <phase>integration-test</phase>
                  <goals>
                      <goal>integration-test</goal>
                  </goals>
            </execution>
            <execution>
                <id>verify</id>
                <phase>verify</phase>
                <goals>
                    <goal>verify</goal>
                </goals>
            </execution>
        </executions>
     </plugin>
    

    所以我运行这个: mvn clean verify

    注意,Jetty 停止后,会有一些 cobertura 消息:

    [INFO] -------------------------------------------------------
    [INFO] BUILD SUCCESSFUL
    [INFO] -------------------------------------------------------
    [INFO] Total time: 1 minute 13 seconds
    [INFO] Finished at: Sun Nov 13 12:58:29 ICT 2011
    [INFO] Final Memory: 86M/204M
    [INFO] -------------------------------------------------------
    2011-11-13 12:58:29.765:WARN::4 threads could not be stopped
    Flushing results...
    Flushing results done
    Cobertura: Loaded information on 342 classes.
    Cobertura: Saved information on 342 classes.
    

    最后,我使用mvn site 生成报告。这是我的报告配置

    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-report-plugin</artifactId>
                <!-- An error on version 2.8 -->
                <version>2.7</version>
                <configuration>
                    <reportsDirectories>
                        <reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory>
                        <reportsDirectory>${project.build.directory}/failsafe-reports</reportsDirectory>
                    </reportsDirectories>
                </configuration>
                <reportSets>
                    <reportSet>
                        <reports>
                            <report>report-only</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <!-- An error that takes long time to generate this report -->
                    <dependencyLocationsEnabled>false</dependencyLocationsEnabled>
                </configuration>
                <reportSets>
                    <reportSet>
                        <reports>
                            <report>dependencies</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-it-maven-plugin</artifactId>
                <configuration>
                    <formats>
                        <format>html</format>
                        <format>xml</format>
                    </formats>
                </configuration>
                <reportSets>
                    <reportSet>
                        <reports>
                            <report>report-only</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
        </plugins>
    </reporting>
    

    【讨论】:

      【解决方案2】:

      也许你需要一些&lt;execution&gt; 标签到你的cobertura-maven-plugin 插件配置。 http://mojo.codehaus.org/cobertura-maven-plugin/instrumentingDeploymentArtifact.html 上有一些示例,但这个答案看起来更好:What is the proper way to use Cobertura with Maven 3.0.2

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-19
        • 2013-02-15
        • 2016-10-29
        • 1970-01-01
        相关资源
        最近更新 更多