【问题标题】:Cobertura code coverage test on Maven pluginMaven 插件上的 Cobertura 代码覆盖率测试
【发布时间】:2014-09-12 03:53:43
【问题描述】:

我正在尝试为我开发的一个简单的 Maven 插件生成代码覆盖率报告。 Cobertura 在我的项目中正确生成了包含三个类的报告,但即使测试成功执行,它也会报告 0% 的代码覆盖率。我已经在调试模式下运行它,Cobertura 没有报告任何错误或堆栈跟踪。

我在POM文件中的配置很简单:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>

    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-artifact</artifactId>
        <version>3.0.5</version>
    </dependency>

    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-compat</artifactId>
        <version>3.0.5</version>
    </dependency>

    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-plugin-api</artifactId>
        <version>3.0.5</version>
    </dependency>

    <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.6</version>
    </dependency> 

    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-core</artifactId>
        <version>3.0.5</version>
    </dependency>  

    <dependency>
        <groupId>org.apache.maven.plugin-tools</groupId>
        <artifactId>maven-plugin-annotations</artifactId>
        <version>3.1</version>
    </dependency>
    <dependency>
        <!-- version 2.1 uses sonatype aether. anything after 2.1 uses eclipse aether. -->
        <groupId>org.apache.maven.plugin-testing</groupId>
        <artifactId>maven-plugin-testing-harness</artifactId>
        <scope>test</scope>
        <version>2.1</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.twdata.maven</groupId>
        <artifactId>mojo-executor-maven-plugin</artifactId>
        <version>2.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.4</version>
        <type>maven-plugin</type>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.16</version>
            <executions>
                <execution>
                    <id>test-custom-plugin</id>
                    <phase>test</phase>
                    <goals> 
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <forkMode>never</forkMode>
                        <forkCount>0</forkCount>
                        <reuseForks>true</reuseForks>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-plugin-plugin</artifactId>
            <version>3.2</version>
            <configuration>
                <goalPrefix>MyCustomPlugin</goalPrefix>
            </configuration>
            <executions>
                <execution>
                    <id>default-descriptor</id>
                    <goals>
                        <goal>descriptor</goal>
                    </goals>
                    <phase>process-classes</phase>
                </execution>
                <execution>
                    <id>help-descriptor</id>
                    <goals>
                        <goal>helpmojo</goal>
                    </goals>
                    <phase>process-classes</phase>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
            <version>2.5.2</version>
        </plugin>
    </plugins>
</build>    

Cobertura 适用于我的所有其他项目(到目前为止),是否有任何理由无法报告 Maven 插件项目的覆盖率?

【问题讨论】:

  • 请出示完整的 pom 文件,否则很难看到发生了什么。
  • @khmarbaise:我从 POM 中添加了更多细节
  • 首先,我怀疑您对 maven-assembly-plugin、maven-resources-plugin 的依赖是否有意义,除了您将测试放在哪里。报告的测试会被执行吗? mvn clean test?魔精被提取了吗?你能显示输出吗?此外,你喜欢写什么样的插件?真的需要吗?
  • @khmarbaise:运行mvn clean test 可以工作并生成可靠的测试报告。该插件做了一些特殊的工作,它根据这里非常特殊的情况所需的配置构建程序集、资源包和工件(我们可以在没有插件的情况下做到这一点,但是要做到这一点的 POM 文件太大而且复杂,没有人愿意维护它)。出于某种奇怪的原因,Test 输出在控制台中出现了两次。

标签: java maven maven-plugin cobertura maven-cobertura-plugin


【解决方案1】:

看来问题出在我的万无一失的配置上。我把它改成

        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.16</version>
            <executions>
                <execution>
                    <id>test-custom-plugin</id>
                    <phase>test</phase>
                    <goals> 
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <forkCount>1</forkCount>
                        <reuseForks>true</reuseForks>
                    </configuration>
                </execution>
            </executions>
        </plugin>

现在可以正确生成报告。我从一些我看到的与为声纳插件生成报告相关的类似问题的帖子中得到了更改 fork 选项的想法,并且更改了 fork 选项解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 2023-03-25
    • 2011-01-10
    • 2013-05-28
    • 2011-12-21
    相关资源
    最近更新 更多