Jump to: navigation, search

Difference between revisions of "Code Coverage with Emma"

Line 86: Line 86:
[[Category:Equinox | Code Coverage]]

Revision as of 14:04, 28 March 2007


  • Download and extract latest Emma release.
  • Put the contents of the build.xml file below into a file in your workspace.
  • Edit the 3 properties at the top of the file.
    • project.dir - the root directory of the project that you are testing
    • output.dir - the directory where you want your output to go
    • emma.dir - your Emma installation directory
  • Create a new Ant launch configuration called Emma Instrumentation and select the instr target.
  • Run the Emma Instrumentation launch configuration. This will instrument the class files in your output directory.
  • Run your test suites with the -Demma.coverage.out.file=<output.dir>/coverage.ec (fill in your output directory).
  • Create a new Ant launch configuration called Emma Create Report and select the report target.
  • Run the Emma Create Report launch configuration. This will generate a report in the output directory. Open the index.html file to start browsing the results.


  • Remember to clean your bin/ folder to remove instrumented class files.
  • You may have to expand the export-src Ant call if you have multiple source folders in your project.
  • You will also have to make changes if you have multiple output folders in your project.


These are the contents of the Ant build file that you will be running.

<?xml version="1.0" encoding="UTF-8"?>
<project name="emma" basedir="../../.">

	<!-- What project are you testing? -->
	<property name="project.dir" value="${basedir}/org.eclipse.core.jobs"/>

	<!-- Where should we output the results?-->
	<property name="output.dir" value="D:/temp/emma20070328"/>

	<!-- Emma? Where are you? (Emma installation directory)-->
	<property name='emma.dir' value='D:/downloads/emma-2.0.5312' />


	<!-- Where are the class files? -->
	<property name="bin" value="${project.dir}/bin"/>
	<!-- EMMA distribution directory: -->
	<path id='emma.lib' >
		<fileset dir='${emma.dir}' includes='lib/*.jar' />
	<taskdef resource='emma_ant.properties' classpathref='emma.lib' />

	<!-- Target which instruments the class files -->
	<target name="instr">
		<mkdir dir="${output.dir}"/>
			<!-- instrumentation of bin folder -->
			<instr instrpath="${bin}" mode="overwrite" outfile="${output.dir}/coverage.em"/>
		<!-- copy the emma classes into the bin folder -->
		<unjar dest="${bin}" src="${emma.dir}/lib/emma.jar" overwrite="true"/>

	<!-- This target copies your source files so they can be used for generation of
			the reports later. -->
	<property name="src.dir" value="${output.dir}/src" />
	<target name="export-src">
		<antcall target="cleanup"/>
		<mkdir dir="${src.dir}" />
		<copy todir="${src.dir}">
			<fileset dir="${project.dir}/src">
				<include name="**/*.java"/>

	<!-- Generate the report. -->
	<target name="report">
		<antcall target="export-src"/>
			<!-- creating a report -->
			<report sort="+name,+class,+method,+block" sourcepath="${src.dir}">
				<infileset dir="${output.dir}" includes="*.em, *.ec"/>
				<html outfile="${output.dir}/index.html" depth="method" columns="name,class,method,block,line"/>

	<target name="cleanup">
		<delete dir="${src.dir}" failonerror="false"/>