【问题标题】:Tests running twice when using cobertura and maven site plugin使用 cobertura 和 maven 站点插件时运行两次测试
【发布时间】:2014-10-14 10:27:38
【问题描述】:

我正在使用 maven 站点插件和 cobertura 一起运行单元测试并生成报告。一切正常,但唯一的问题是所有单元测试都运行了两次。

我尝试将forkMode 设置为nevermaven-site-plugin,但即便如此我也面临同样的问题。

任何帮助将不胜感激。

我的命令:mvn cobertura:cobertura -Dcobertura.report.format=html

我的 pom:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <configuration>
                    <aggregate>true</aggregate>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>clean</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <configuration>
                    <aggregate>false</aggregate>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>findbugs-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-site-plugin</artifactId>
            </plugin>
        </plugins>
    </pluginManagement>

    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

<reporting>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
            <configuration>
                <formats>
                    <format>html</format>
                    <format>xml</format>
                </formats>
                <instrumentation>
                    <excludes>
                        <exclude>**/test/**/*.class</exclude>
                    </excludes>
                </instrumentation>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-pmd-plugin</artifactId>
            <version>3.0.1</version>
            <configuration>
                <targetJdk>1.6</targetJdk>
                <linkXref>true</linkXref>
                <sourceEncoding>ISO-8859-1</sourceEncoding>
                <format>xml</format>
                <aggregate>true</aggregate>
                <verbose>true</verbose>
                <rulesets>
                    <ruleset>favorites.xml</ruleset>
                </rulesets>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.9.1</version>
            <configuration>
                <aggregate>true</aggregate>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>findbugs-maven-plugin</artifactId>
            <version>2.5.2</version>
            <configuration>
                <xmlOutput>true</xmlOutput>
            </configuration>
        </plugin>
    </plugins>
</reporting>

【问题讨论】:

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


【解决方案1】:

我认为这是正常行为。

您正在使用基于同一事物的两个不同报告:

  • 测试报告要求运行测试,但不启用覆盖率。
  • 覆盖率报告要求测试运行覆盖率。

但两个报告彼此不知道,这就是为什么它会运行两次。

[更新] 阅读此mailing list 后,它说您最好在配置文件中禁用测试(使用skipTests)。

至于你的命令行,它会给出:

mvn cobertura:cobertura -DskipTests -Dcobertura.report.format=html

但是请注意,我的项目无法让 cobertura 正常工作(在第 106 行第 12 列遇到了““final”“final”。),所以我不知道它是否工作。

【讨论】:

  • 是的。你可能是对的。但是有没有办法避免这种情况?在一些论坛中提到可以添加“forkmode”作为配置来避免这种情况。但这对我不起作用。
【解决方案2】:

我最终创建了 2 个配置文件,一个用于 cobertura,另一个用于站点,用于构建 findbug、CPD 和 PMD 分析。不确定这是否是正确的方法,但可以解决我的问题。

希望这对某人有所帮助。

【讨论】:

    【解决方案3】:

    测试将始终使用cobertura-maven-plugin 运行两次。

    如果您需要 cobertura 报告并希望只运行一次测试,您可以尝试 qualinsight-mojo-cobertura-core 插件。您将在项目页面上找到文档:https://github.com/QualInsight/qualinsight-mojo-cobertura

    【讨论】:

    • 请不要对多个问题发布完全相同的答案。而是选择最好的问题并在那里发布您的答案,然后您可以将较差的问题标记为与较好的问题重复。如果它们不是重复的,那么您需要更改每个答案,以便它回答 该特定问题。我投票结束这个问题作为原始问题的副本:running junits and cobertura with maven
    猜你喜欢
    • 1970-01-01
    • 2011-01-12
    • 2014-12-17
    • 2013-03-25
    • 2011-05-30
    • 2012-01-16
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    相关资源
    最近更新 更多