EMMA组件分析代码执行覆盖率 推荐
2010-01-31 20:28
656 查看
EMMA是一个很好的组件,可以很方便地测试JAVA代码执行的覆盖率,执行的方法可以是JUNIT的Test,也可以是手工的UNITTEST。它通过在JAVA的CLASS文件里加字节码并不改变原代码的执行逻辑来实现统计执行情况。被注入EMMA字节码的代码在JVM上运行需要保证EMMA.jar在CLASSPATH范围,另一个条件就是JVM运行参数需要emma.coverge.out.file和emma.coverage.out.merge来指明统计数据导出路径和导出是否合并。
-Demma.coverage.out.file=/mnt/ emma/coverage.emma -Demma.coverage.out.merge=true
JVM启动命令中加上述参数,其中emma.coverage.out.file设置为coverage result目标文件。如在JBOSS环境中,则在JBOSS的run.sh中加到JAVA_OPTS, JAVA程序加到JAVA命令行中。ANT的JUNIT可以加jvmarg如下在batchtest前。
<jvmarg value="-Demma.coverage.out.file=/mnt/slim-emma/coverage.emma"/>
<jvmarg value="-Demma.coverage.out.merge=true"/>
下面的XML是一个ANT的build.xml示例,需要emma.jar和emma_ant.jar包,实验中,发现EMMA的merge任务中的fileset必须包含两个,一个为统计数据增量文件集,一个为元数据增量文件集,不知是否该限制是否是我哪儿错了。
<?xml version="1.0"?>
<project name="EMMA" default="all" basedir="." >
<property file="build.properties"/>
<property name="emma.enabled" value="true" />
<property name="coverage.dir" value="${emma.dir}/coverage" />
<property name="merge.dir" value="${coverage.dir}/merge" />
<path id="classpath">
<!-- ant lib -->
<fileset dir="${ant.home}/lib">
<include name="*.jar" />
</fileset>
</path>
<path id="emma.lib" >
<pathelement location="${emma.lib.dir}/emma.jar" />
<pathelement location="${emma.lib.dir}/emma_ant.jar" />
</path>
<!-- this loads <emma> and <emmajava> custom tasks: -->
<taskdef resource="emma_ant.properties" classpathref="emma.lib" />
<target name="clean">
<delete file="${coverage.dir}/metadata*.emma" />
</target>
<target name="emma.instr" depends="clean">
<emma enabled="${emma.enabled}">
<instr instrpath="${out.instr.dir}/" mode="overwrite" destdir="${out.instr.dir}/"
metadatafile="${coverage.dir}/metadata.emma" merge="false">
</instr>
</emma>
</target>
<target name="merge">
<delete file="${merge.dir}/coverage.es" />
<emma enabled="true">
<merge outfile="${merge.dir}/coverage.es" basemetadatafile="${coverage.dir}/metadata.emma">
<fileset dir="${merge.dir}" >
<include name="metadata*.emma" />
</fileset>
<fileset dir="${merge.dir}" >
<include name="coverage*.emma" />
</fileset>
</merge>
</emma>
</target>
<target name="report" depends="merge">
<emma enabled="true">
<report sourcepath="${src.dir}" verbosity="verbose" depth="method">
<fileset dir="${merge.dir}" includes="coverage.es" />
<html outfile="${coverage.dir}/coverage.html" depth="method" columns="name,class,method,block,line"/>
</report>
</emma>
</target>
</project>
-Demma.coverage.out.file=/mnt/ emma/coverage.emma -Demma.coverage.out.merge=true
JVM启动命令中加上述参数,其中emma.coverage.out.file设置为coverage result目标文件。如在JBOSS环境中,则在JBOSS的run.sh中加到JAVA_OPTS, JAVA程序加到JAVA命令行中。ANT的JUNIT可以加jvmarg如下在batchtest前。
<jvmarg value="-Demma.coverage.out.file=/mnt/slim-emma/coverage.emma"/>
<jvmarg value="-Demma.coverage.out.merge=true"/>
下面的XML是一个ANT的build.xml示例,需要emma.jar和emma_ant.jar包,实验中,发现EMMA的merge任务中的fileset必须包含两个,一个为统计数据增量文件集,一个为元数据增量文件集,不知是否该限制是否是我哪儿错了。
<?xml version="1.0"?>
<project name="EMMA" default="all" basedir="." >
<property file="build.properties"/>
<property name="emma.enabled" value="true" />
<property name="coverage.dir" value="${emma.dir}/coverage" />
<property name="merge.dir" value="${coverage.dir}/merge" />
<path id="classpath">
<!-- ant lib -->
<fileset dir="${ant.home}/lib">
<include name="*.jar" />
</fileset>
</path>
<path id="emma.lib" >
<pathelement location="${emma.lib.dir}/emma.jar" />
<pathelement location="${emma.lib.dir}/emma_ant.jar" />
</path>
<!-- this loads <emma> and <emmajava> custom tasks: -->
<taskdef resource="emma_ant.properties" classpathref="emma.lib" />
<target name="clean">
<delete file="${coverage.dir}/metadata*.emma" />
</target>
<target name="emma.instr" depends="clean">
<emma enabled="${emma.enabled}">
<instr instrpath="${out.instr.dir}/" mode="overwrite" destdir="${out.instr.dir}/"
metadatafile="${coverage.dir}/metadata.emma" merge="false">
</instr>
</emma>
</target>
<target name="merge">
<delete file="${merge.dir}/coverage.es" />
<emma enabled="true">
<merge outfile="${merge.dir}/coverage.es" basemetadatafile="${coverage.dir}/metadata.emma">
<fileset dir="${merge.dir}" >
<include name="metadata*.emma" />
</fileset>
<fileset dir="${merge.dir}" >
<include name="coverage*.emma" />
</fileset>
</merge>
</emma>
</target>
<target name="report" depends="merge">
<emma enabled="true">
<report sourcepath="${src.dir}" verbosity="verbose" depth="method">
<fileset dir="${merge.dir}" includes="coverage.es" />
<html outfile="${coverage.dir}/coverage.html" depth="method" columns="name,class,method,block,line"/>
</report>
</emma>
</target>
</project>
相关文章推荐
- jmeter emma.jar 采用EMMA对JMeter执行代码覆盖率分析
- 关于.net验证控件检错之后继续执行后台代码的错误分析 推荐
- 代码执行覆盖率工具Emma、cobertura简单比较
- 代码执行覆盖率工具Emma、cobertura简单比较
- [Android]使用Emma进行单体测试代码覆盖率分析
- 用Emma 的eclipse 插件进行代码覆盖率测试
- VS2013单元测试及代码覆盖率分析--Xunit
- CVE-2012-0003 Microsoft Windows Media Player ‘winmm.dll’ MIDI文件解析远程代码执行漏洞 分析
- gcov和lcov对linux c++分析代码覆盖率
- linux下对第三方程序的代码执行效率分析
- Monkey源码分析2—Monkey代码如何被启动执行
- 数值分析多种算法C语言代码-推荐
- 代码覆盖率工具 EMMA
- 《Linux内核分析》(一)——反汇编一个简单的C程序并分析其汇编代码的执行
- Apache Mahout的Taste基于Hadoop实现协同过滤推荐引擎的代码分析
- junit + ant + emma生成代码测试覆盖率报告
- PVS-Studio 静态代码分析工具推荐
- “Xavier”安卓木马分析:可静默收集数据并远程代码执行
- Apache Mahout的Taste基于Hadoop实现协同过滤推荐引擎的代码分析
- Java多线程--JVM执行之使用HSDIS插件分析JVM代码执行细节