EMMA组件分析代码执行覆盖率

简介:
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>


本文转自 dannyy1026 51CTO博客,原文链接:
http://blog.51cto.com/dannyyuan/272659
相关文章
|
自然语言处理 关系型数据库 MySQL
MySQL索引之全文索引(FULLTEXT)
MySQL索引之全文索引(FULLTEXT) MySQL创建全文索引 使用索引时数据库性能优化的必备技能之一。
7928 0
MySQL索引之全文索引(FULLTEXT)
|
存储 负载均衡 关系型数据库
关系型数据库设计集群架构架构选择
【5月更文挑战第6天】还可以考虑使用现有的数据库管理系统(DBMS)提供的集群解决方案,如MySQL的InnoDB Cluster、PostgreSQL的Streaming Replication和Patroni等。这些解决方案已经经过了广泛测试和验证,可以大大降低集群架构设计和实现的难度。
341 1
关系型数据库设计集群架构架构选择
|
机器学习/深度学习 供应链 安全
守护Windows系统安全:挑战、策略与未来展望
加强数据备份与恢复以及提升用户安全意识等。同时,展望未来,人工智能与机器学习、零信任架构、量化安全评估与风险管理以及强化供应链安全等新技术和新理念将为Windows系统安全提供更加坚实的保障。让我们共同努力,守护好Windows系统的安全防线,为数字化时代的繁荣发展贡献力量。
|
JSON API 数据安全/隐私保护
京东商品详情API接口获取(jd.item_get)和展示
京东商品详情API接口使用指南:首先注册成为开发者,获取Key和Secret;接着申请API权限,通过审核后获得AppKey和AppSecret;然后研读API文档,了解接口规则;随后根据文档构建API请求,设置必要参数;最后发送请求并处理返回的JSON数据。
|
Java
Java 计算两个时间点包含工作日天数【拿来即用】
Java 计算两个时间点包含工作日天数【拿来即用】
640 0
|
消息中间件 Java 数据库
Spring事务监听机制---使用@TransactionalEventListener处理数据库事务提交成功后再执行操作(附:Spring4.2新特性讲解)【享学Spring】(上)
Spring事务监听机制---使用@TransactionalEventListener处理数据库事务提交成功后再执行操作(附:Spring4.2新特性讲解)【享学Spring】(上)
|
缓存 前端开发 开发者
useMemo 和 useCallback -React.memo
useMemo 和 useCallback -React.memo
206 0
|
机器学习/深度学习 网络协议 Docker
基于docker搭建conda深度学习环境(支持GPU加速)
在Ubuntu系统,创建一个docker,然后搭建conda深度学习环境,这样可以用conda或pip安装相关的依赖库了。
4040 0