使用JaCoCo的JBoss AS 7测试套件的代码覆盖-jacoco.exec文件中没有数据 [英] Code coverage of JBoss AS 7 testsuite, using JaCoCo - no data in jacoco.exec files

查看:120
本文介绍了使用JaCoCo的JBoss AS 7测试套件的代码覆盖-jacoco.exec文件中没有数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试了解JBoss AS7.这是我的分支机构: https://github.com/OndraZizka/jboss-as/tree/TS/jacoco

I'm trying to get coverage of JBoss AS 7. Here's my branch: https://github.com/OndraZizka/jboss-as/tree/TS-jacoco

运行mvn clean install -rf testsuite -DallTests -Dcoverage -fae时,我得到(几乎)空的jacoco.exec文件-只是一些元数据(大小为几个字节). 使用的JVM arg行是:

When I run mvn clean install -rf testsuite -DallTests -Dcoverage -fae I get (almost) empty jacoco.exec files - just some metadata (size is few bytes). The JVM arg line used is:

-javaagent:${jbossas.ts.dir}/target/jacoco-jars/agent/jacocoagent.jar=destfile=${basedir}/target/jacoco.exec,includes=${jboss.home}/modules/**/*,excludes=${basedir}/target/classes/**/*,append=true,output=file

此行传递给Arquillian,用于启动JBoss AS 7. 测试套件运行,传递了参数(它出现在AS7的boot.log中),但是生成的jacoco.exec文件只有几个字节.该报告当然没有涵盖范围.

This line is passed to Arquillian to use to start JBoss AS 7. The testsuite runs, the argument is passed (it appears in AS7's boot.log), but the resulting jacoco.exec file is only few bytes in size. The report of course shows no coverage.

我在做什么错了?

推荐答案

已解决-代理程序的"includes"和"excludes"参数引用类名,而不是文件.

Resolved - the "includes" and "excludes" parameters of the agent refer to class names, not files.

我的情况下正确的JVM代理参数是:

Correct JVM agent argument for my case is:

-javaagent:${jbossas.ts.dir}/target/jacoco-jars/agent/jacocoagent.jar=destfile=${basedir}/target/jacoco.exec,includes=*,excludes=org.jboss.as.test.*,append=true,output=file

我的方法是配置maven jacoco插件以获取参数,然后将属性硬编码到pom.xml中,因为该插件生成的属性未传递给Surefire插件.

My aproach was to configure the maven jacoco plugin to get the argument, and then hard-coded the property into pom.xml since the property generated by the plugin is not passed to the Surefire plugin.

    <profile>
        <id>ts.jacoco.profile</id>
        <activation><property><name>coverage</name></property></activation>
        <properties>
            <jvm.args.jacoco>-javaagent:${jbossas.ts.dir}/target/jacoco-jars/agent/jacocoagent.jar=destfile=${basedir}/target/jacoco.exec,includes=*,excludes=org.jboss.as.test.*,append=true,output=file</jvm.args.jacoco>
        </properties>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>${version.jacoco.plugin}</version>
                    <executions>
                        <execution><id>ts.jacoco-prepare</id>
                            <phase>process-test-classes</phase>
                            <goals><goal>prepare-agent</goal></goals>
                            <configuration>
                                <append>true</append>
                                <destFile>target/jacoco.exec</destFile>
                                <includes>
                                    <include>*</include>
                                </includes>
                                <excludes>
                                    <exclude>org.jboss.as.test.*</exclude>
                                </excludes>
                                <output>file</output>
                                <propertyName>jvm.args.jacoco</propertyName>
                            </configuration>
                        </execution>
                        <!-- Doesn't work currently - waiting for JaCoCo to fix this. Moved to the Ant plugin execution. -->
                        <execution><id>ts.jacoco.report</id>
                            <phase>none</phase> <!-- post-integration-test -->
                            <goals><goal>report</goal></goals>
                            <configuration>
                                <dataFile>target/jacoco.exec</dataFile>
                                <outputDirectory>target/coverageReport</outputDirectory>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <!-- Copy JaCoCo jars to have them for the Ant plugin. -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <executions>
                        <!-- Copy the ant tasks jar. Needed for ts.jacoco.report-ant . -->
                        <execution> <id>ts.jacoco.dep.ant</id> <goals><goal>copy</goal></goals> <phase>process-test-resources</phase> <inherited>false</inherited>
                            <configuration>
                                <artifactItems>
                                    <artifactItem><groupId>org.jacoco</groupId><artifactId>org.jacoco.ant</artifactId><version>${version.jacoco.plugin}</version></artifactItem>
                                </artifactItems>
                                <stripVersion>true</stripVersion>
                                <outputDirectory>${basedir}/target/jacoco-jars</outputDirectory>
                            </configuration>
                        </execution>
                        <!-- Copy the agent jar. Needed for ${jvm.args.jacoco} to have this jar on known path.
                             If the ts.jacoco-prepare worked and really put the value into the property, this might go away. -->
                        <execution> <id>ts.jacoco.dep.agent</id> <goals><goal>unpack</goal></goals> <phase>process-test-resources</phase> <inherited>false</inherited>
                            <configuration>
                                <artifactItems>
                                    <artifactItem><groupId>org.jacoco</groupId><artifactId>org.jacoco.agent</artifactId><version>${version.jacoco.plugin}</version></artifactItem>
                                </artifactItems>
                                <stripVersion>true</stripVersion>
                                <outputDirectory>${basedir}/target/jacoco-jars/agent</outputDirectory>
                            </configuration>
                        </execution>

                    </executions>
                </plugin>
                <!-- Ant plugin. -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <executions>
                        <!-- DEBUG -->
                        <execution>
                            <id>ts.jacoco.debug</id>
                            <phase>post-integration-test</phase>
                            <goals><goal>run</goal></goals>
                            <inherited>false</inherited>
                            <configuration>
                                <target>
                                    <echo>Jacoco argline: ${jvm.args.jacoco}</echo>
                                    <echo>Jacoco jar: ${basedir}/target/jacoco-jars/org.jacoco.ant.jar</echo>
                                </target>
                            </configuration>
                        </execution>
                        <!-- Must be run using Ant due to https://sourceforge.net/tracker/?func=detail&aid=3474708&group_id=177969&atid=883354 -->
                        <execution>
                            <id>ts.jacoco.report-ant</id>
                            <phase>site</phase> <!-- post-integration-test -->
                            <goals><goal>run</goal></goals>
                            <inherited>false</inherited>
                            <configuration>
                                <target>
                                    <taskdef name="report" classname="org.jacoco.ant.ReportTask">
                                        <classpath path="${basedir}/target/jacoco-jars/org.jacoco.ant.jar"/>
                                    </taskdef>
                                    <echo>Creating JaCoCo test coverage reports...</echo>
                                    <mkdir dir="${basedir}/target/coverage-report"/>
                                    <report>
                                        <executiondata>
                                            <fileset dir="${basedir}">
                                                <include name="**/target/jacoco.exec"/>
                                            </fileset>
                                        </executiondata>
                                        <structure name="AS 7 project">
                                            <classfiles>
                                                <fileset dir="${jboss.dist}/modules">
                                                    <include name="**/*.jar"/>
                                                    <!-- We have 2.x in main. -->
                                                    <exclude name="com/sun/jsf-impl/1.*/**/*"/>
                                                    <!-- AS7-3383 - com/sun/codemodel vs. /1.0/com/sun/codemodel -->
                                                    <exclude name="com/sun/xml/**/*"/>
                                                    <exclude name="javax/faces/api/1.2/**/*"/>
                                                    <!-- AS7-3390 -->
                                                    <exclude name="org/apache/commons/beanutils/**/*"/>
                                                    <!-- AS7-3389 -->
                                                    <exclude name="org/python/jython/standalone/**/*"/>
                                                </fileset>
                                            </classfiles>
                                            <sourcefiles encoding="UTF-8">
                                                <fileset dir="${jbossas.project.dir}">
                                                    <include name="**/*.java"/>
                                                    <exclude name="testsuite/**/*.java"/>
                                                </fileset>
                                            </sourcefiles>
                                        </structure>
                                        <html destdir ="${basedir}/target/coverage-report/html"/>
                                        <xml destfile="${basedir}/target/coverage-report/coverage-report.xml"/>
                                        <csv destfile="${basedir}/target/coverage-report/coverage-report.csv"/>
                                    </report>
                                </target>
                            </configuration>
                        </execution>
                    </executions>
                    <dependencies>
                        <dependency>
                            <groupId>org.jacoco</groupId>
                            <artifactId>org.jacoco.ant</artifactId>
                            <version>${version.jacoco.plugin}</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </build>
    </profile>

这篇关于使用JaCoCo的JBoss AS 7测试套件的代码覆盖-jacoco.exec文件中没有数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆