Emma 覆盖率工具利用(Eclipse Maven Ant)

最近在调查几个代码覆盖率的工具,其中就用到了Emma。发现Emma还挺好用的。它有Eclipse的插件,Maven插件,并且有emma_ant.jar提供对ant的支持。

1.最简单的Eclipse Emma插件

先说最简单的,在Eclipse中利用Emma插件:eclemma。
官网:http://www.eclemma.org
eclipse插件安装地址: http://update.eclemma.org/
在Eclipse中安装完后,就可以在工具栏中看到emma的按钮
工程下的测试类跑完Junit后,点击该按钮,即可在代码中显示覆盖情况。
当然,需要的话也可以导出覆盖率报告,
Emma 覆盖率工具利用(Eclipse Maven Ant)
从上图中可以看到,Export中已经存在导出覆盖率报告的选项。点击Next后,会列出最近的test session,如下图:
Emma 覆盖率工具利用(Eclipse Maven Ant)
选中需要导出报告的session,设置报告的导出类型(如:HEML report)和目标路径后,点击finish即可导出。

2.Maven中利用emma也很简单

Maven中有emma的插件,所以使用起来也非常方便。
官网:http://mojo.codehaus.org/emma-maven-plugin/
关于pom文件的配置,可以直接参照官方网站的文章:http://mojo.codehaus.org/emma-maven-plugin/usage.html
其中有一点需要注意,在eclipse中使用m2eclipse的时候,很多情况下不能正确识别maven插件中<execution>的内容,为了解决这个问题,需要在<plugins>标签的外部再套上<pluginmanagement>标签(具体原因不清楚,不过能解决pom文件报错的问题)。
配置完以后,在之前的maven命令中插入emma:emma即可生成emma的测试报告,如:clean emma:emma package。
生成的报告默认是在target/site下。

3.喜欢自己动手就用Ant吧

ant中利用emma稍微有点复杂,不过也更加灵活,便于各种非maven工程的使用。
首先,需要下载emma的jar包,包括emma.jar和emma_ant.jar。在souceforge上就能找到(不过版本比较老):emma.sourceforge.net/‎
下载的emma包中还包含了文档和sample,学习起来还是比较方便的。
下面列出build.xml的中比较关键的配置:
1.设置emma的property:

	<!-- Emma properties -->
	<property name="emma.enabled" value="true" />
	<property name="emma.filter" value="" />
其中emma.filter的value中,+开头即表示include,-开头即表示exclude,如
        <property name="emma.filter" value="-*test*" />
2.导入emma的jar包:
	<!-- Emma jar path -->
	<path id="emma-classpath">
		<pathelement location="${external-lib.dir}/emma.jar" />
		<pathelement location="${external-lib.dir}/emma_ant.jar" />
	</path>
	<taskdef resource="emma_ant.properties" classpathref="emma-classpath" />
3.运行junit:
		<!-- Emma Instrumentation -->
		<emma enabled="${emma.enabled}">
			<instr instrpath="${test.class.dir}" mode="overwrite" metadatafile="${test.report.dir}/metadata.emma" merge="true">
				<filter value="${emma.filter}" />
			</instr>
		</emma>
		<junit printsummary="true" fork="yes">
			<classpath refid="test-classpath" />
			<formatter type="plain" usefile="false" />
			<formatter type="xml" />
			<batchtest todir="${test.report.dir}">
				<fileset dir="${test.class.dir}">
					<patternset>
						<include name="**/*Test.class" />
					</patternset>
				</fileset>
			</batchtest>
			<!-- For Emma -->
	            <jvmarg value="-XX:-UseSplitVerifier" />
		    <jvmarg value="-Demma.coverage.out.file=${test.report.dir}/coverage.emma" />
		    <jvmarg value="-Demma.coverage.out.merge=true" />
		</junit>
emma的 Instrumentation有3中mode,这里由于测试的class不会在之后用来打包,所以直接使用了overwrite模式,默认mode为copy。

junit的配置中有几点需要注意,首先fork属性必须为true,否则不能加载jvm的参数。其次,如果jre为1.7的情况下,由于emma对java7的支持不是很好,需要加入以下参数:

	            <jvmarg value="-XX:-UseSplitVerifier" />

4.生成report:

		<!-- Emma Report -->
		<emma enabled="${emma.enabled}" >
		    <report sourcepath="${src.dir}"
		          sort="+block,+name,+method,+class"
		          metrics="method:70,block:80,line:80,class:100"
		    >
		    <fileset dir="${test.report.dir}" >
		        <include name="*.emma" />
		    </fileset>
		    <txt outfile="${test.report.dir}/coverage.txt"
		        depth="package"
		        columns="class,method,block,line,name"
		    />
		    <xml outfile="${test.report.dir}/coverage.xml"
		        depth="package"
		    />
		    <html outfile="${test.report.dir}/coverage.html"
		        depth="method"
		        columns="name,class,method,block,line"
		    />
		    </report>
		</emma>
配置完成之后,运行build.xml就可以生成覆盖率报告了。

你可能感兴趣的:(Emma 覆盖率工具利用(Eclipse Maven Ant))