java - 为什么 Jacoco 可能会显示 0 的代码覆盖率?

标签 java maven code-coverage jacoco

我有下面的 pom.xml

<plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-surefire-plugin</artifactId>
             <version>2.18</version>
             <configuration>
             <!-- Sets the VM argument line used when unit tests are run. -->
                <argLine>-Xms512m -Xmx1024m -XX:MaxPermSize=512m ${jacoco.agent.argLine}</argLine>
             </configuration>
         </plugin>
         <plugin> 
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.7.5.201505241946</version>
            <configuration>
                <dataFile>target/jacoco.exec</dataFile>
            </configuration>
            <executions>
                <execution>
                    <id>pre-unit-test</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                    <configuration>
                            <propertyName>jacoco.agent.argLine</propertyName>
                            <destFile>target/jacoco.exec</destFile>
                    </configuration>
                </execution>
               <execution>
                    <id>default-report</id>
                    <phase>test</phase>
                    <goals>
                    <goal>report</goal>
                    </goals>
                </execution>
            </executions>
         </plugin>

我正在使用 maven-compiler-plugin v2.5.1

当我从 Eclipse 进行干净测试时,它会创建 target/jacoco.exec 文件,创建后我使用 jacoco:report 运行它,它也会创建报告。但是报告显示除一个包外所有包的代码覆盖率为 0%。

当我使用 cobertura 为同一组类运行报告时,它正确地向我们展示了代码覆盖率。

这可能是什么问题?

更新

添加我的 maven 日志:

  [INFO] Scanning for projects...
[INFO] 
[INFO] Using the builder org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder with a thread count of 1
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Adaptive Payment Platrom Core 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ app-core ---
[INFO] Deleting C:\Users\SHANK030\git\AdaptivePaymentPlatform\APP_Core\target
[INFO] 
[INFO] --- jacoco-maven-plugin:0.7.5.201505241946:prepare-agent (pre-unit-test) @ app-core ---
[INFO] jacoco.agent.argLine set to -javaagent:C:\\Users\\SHANK030\\.m2\\repository\\org\\jacoco\\org.jacoco.agent\\0.7.5.201505241946\\org.jacoco.agent-0.7.5.201505241946-runtime.jar=destfile=C:\\Users\\SHANK030\\git\\AdaptivePaymentPlatform\\APP_Core\\target\\jacoco.exec,excludes=com/wdpr/payment/data/vo/*.class:com/wdpr/payment/data/mapper/*.class:com/wdpr/payment/helper/provider/AbstractInitializer.class:com/wdpr/payment/helper/provider/Agent.class:com/wdpr/payment/helper/provider/AgentException.class:com/wdpr/payment/helper/provider/AgentFactory.class:com/wdpr/payment/helper/provider/CachedProperties.class:com/wdpr/payment/helper/provider/CachedPropertiesListener.class:com/wdpr/payment/helper/provider/ConnectionPoolAgent.class:com/wdpr/payment/helper/provider/ConnectionPoolUtility.class:com/wdpr/payment/helper/provider/FixedLengthFieldMessage.class:com/wdpr/payment/helper/provider/InitializerSampleImpl.class:com/wdpr/payment/helper/provider/Loader.class:com/wdpr/payment/helper/provider/PropertyHelper.class:com/wdpr/payment/helper/provider/Provider.class:com/wdpr/payment/helper/provider/StratusAck.class:com/wdpr/payment/helper/provider/StratusAuthReq.class:com/wdpr/payment/helper/provider/StratusAuthRsp.class:com/wdpr/payment/helper/provider/StratusConnection.class:com/wdpr/payment/helper/provider/StratusConnectionMgr.class:com/wdpr/payment/helper/provider/StratusConnectionReader.class:com/wdpr/payment/helper/provider/StratusConnectionUtility.class:com/wdpr/payment/helper/provider/StratusFormatException.class:com/wdpr/payment/helper/provider/StratusHeartbeat.class:com/wdpr/payment/helper/provider/StratusMessage.class:com/wdpr/payment/helper/provider/StratusShutdown.class:com/wdpr/payment/helper/provider/StratusStartup.class:com/wdpr/payment/helper/provider/StratusUtility.class:com/wdpr/payment/helper/provider/StratusWebServiceProvider.class:com/wdpr/payment/helper/provider/Timer.class:com/wdpr/payment/helper/provider/WrappedException.class:com/wdpr/payment/helper/outbound/*.class
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ app-core ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] Copying 30 resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ app-core ---
[INFO] Compiling 129 source files to C:\Users\SHANK030\git\AdaptivePaymentPlatform\APP_Core\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ app-core ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 4 resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.5.1:testCompile (default-testCompile) @ app-core ---
[INFO] Compiling 71 source files to C:\Users\SHANK030\git\AdaptivePaymentPlatform\APP_Core\target\test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.18:test (default-test) @ app-core ---
[INFO] Surefire report directory: C:\Users\SHANK030\git\AdaptivePaymentPlatform\APP_Core\target\surefire-reports

更新

添加另一个 maven 日志...这是在测试用例运行之后

    [INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ app-core ---
[INFO] Building jar: C:\Users\SHANK030\git\AdaptivePaymentPlatform\APP_Core\target\appCore.jar
[INFO] 
[INFO] --- jacoco-maven-plugin:0.7.5.201505241946:report (default-report) @ app-core ---
[INFO] Analyzed bundle 'Adaptive Payment Platrom Core' with 68 classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:08 min
[INFO] Finished at: 2015-06-04T15:28:28-05:00
[INFO] Final Memory: 51M/594M
[INFO] ------------------------------------------------------------------------

最佳答案

我在我的应用程序中使用 powermock,它不能很好地与 JaCoCo 执行的在线检测配合使用。所以使用离线检测并排除一些对我有用的clousure类。

我正在使用 mvn clean verify install 运行作业,下面是我的 pom 的更改片段。

<plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <version>2.18</version>
             <executions>
                <execution>
                    <id>default-test</id>
                    <phase>test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <systemPropertyVariables>
                            <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
                        </systemPropertyVariables>
                        <forkMode>once</forkMode>
                        <argLine>-Xms1024m -Xmx2048m -XX:MaxPermSize=1024m</argLine>

                        <excludes>
                            <exclude>META-INF/*.SF</exclude>
                            <exclude>**/StratusAuthTemplateProviderTest.class</exclude>
                            <exclude>**/StratusBalanceInquiryTemplateProviderTest.class</exclude>
                            <exclude>**/PersistCardAuthDetailsForRefundProcessorTest.class</exclude>
                            <exclude>**/PersistCardTxnDetailsProcessorTest.class</exclude>
                            <exclude>**/StratusAuthProcessorTest.class</exclude>
                            <exclude>**/UpdateTxnStatusTest.class</exclude>
                            <exclude>**/RulesTest.class</exclude>
                            <exclude>**/SampleRulesTest.class</exclude>
                            <exclude>**/RefundUpdatePmtTxnConfirmationProcessorTest.class</exclude>
                            <exclude>**/vo/*.class</exclude>
                            <exclude>**/outbound/*.class</exclude>
                            <exclude>**/notification/*.class</exclude>
                        </excludes>
                    </configuration>
                </execution>
            </executions>
     </plugin>
     <plugin> 
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.7.4.201502262128</version>
        <configuration>
            <excludes>
                <exclude>com/wdpr/payment/data/mapper/*.class</exclude>
                <exclude>**/*AjcClosure?.class</exclude>
            </excludes>
        </configuration>
        <executions>
            <execution>
                <id>default-instrument</id>
                <goals>
                    <goal>instrument</goal>
                </goals>
            </execution> 
            <execution>
                <id>default-restore-instrumented-classes</id>
                <goals>
                    <goal>restore-instrumented-classes</goal>
                </goals>
            </execution>
           <execution>
                <id>default-report</id>
                <phase>prepare-package</phase>
                <goals>
                    <goal>report</goal>
                </goals>
            </execution>  
            <execution>
                <id>default-check</id>
                <goals>
                    <goal>check</goal>
                </goals>
                <configuration>
                    <rules>
                        <rule>
                            <element>METHOD</element>
                        </rule>
                    </rules>
                </configuration>
            </execution>
        </executions>
     </plugin>

关于java - 为什么 Jacoco 可能会显示 0 的代码覆盖率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30651765/

相关文章:

unit-testing - 有什么方法可以评估 Drools 规则引擎中 drl 文件的测试覆盖率吗?

android - Flutter:Android Studio 中的内联测试覆盖率

java - application.properties 被忽略,取自别处

java - 运行 hive 0.12 错误为 slf4j

java - 如何从命令行执行 Metrics2 插件?

java - 如何从maven依赖的属性文件中获取位置?

java - 根据枚举输入返回类

java - Maven 缺少 MySQL 依赖项

maven - 将maven的docker镜像与jenkins结合使用-无法创建本地存储库

使用 JaCoCo Gradle 插件的 Android 测试代码覆盖率