HOWTO Coverage measurement with JUnit support
CodeCover has a support for JUnit. Using the TestCases
of JUnit, you can partition your coverage measurement. The test cases of CodeCover have then the same names as the ones of JUnit.
This section contains step-by-step instructions on how to measure coverage with JUnit support using the command-line interface of CodeCover and JUnit. A technical overview can be found in Measurement under Java. A part of this tutorial mentions instrumentation, analysis and report generation. A more detailed explanation can be found in Use CodeCover with the command-line interface.
CodeCover is integrated into Eclipse too, so you can also use JUnit in Eclipse to create test cases. (see CodeCover Measurement for JUnit in Eclipse.
Preconditions
To illustrate the coverage measurement with JUnit support, we discuss a small example. Let's say you have an ordinary project with the following structure:
src/
Person.java
junit/
PersonTest.java
bin/
lib/
junit3.8.1.jar
JUnit-TestRunner.jar
(from the CodeCover release dir)
Moreover, you have scripts or other methods to compile your src
and junit
directory into bin
.
Instrumentation
You can start the instrumentation with the following command:
codecover instrument --root-directory src
--destination src.instr
--container person_tsc.xml
--language java
--verbose
This will instrument all the source files from the folder src
into the folder src.instr
. The test session container will be saved in person.tsc
.
Coverage measurement
Now you have to adapt your compile scripts to compile the instrumented source files from src.instr
rather than the original source files from src
into bin
. Do not forget to compile the helper classes in the newly added package org.codecover.instrumentation
.
Running the test is easy now – just call one of the CodeCover TestRunners
– e.g. the Swing-version. It registers some listeners and then calls the JUnit Swing TestRunner
itself:
java -cp bin;lib\junit3.8.1.jar;lib\JUnit-TestRunner.jar
-methodsAsTestCases
org.codecover.junit3.swing.TestRunner PersonTest
The flag -methodsAsTestCases
tells the TestRunner
to use a CodeCover test cases for each JUnit test method. Otherwise a CodeCover test case is used for every JUnit test case class.
After you executed the tests, there will be a file in your project folder such as coverage-log-2007-11-27-19-23-53-077.clf
. This file contains the coverage data.
Analysis
To analyze the coverage data, you have to load it into your test session container person_tsc.xml
:
codecover analyze --container person_tsc.xml
--coverage-log coverage-log-2007-11-27-19-23-53-077.clf
--name JUnitTestSession
--comment "Two errors occurred."
A brief info
will tell you which test cases have been captured:
codecover info --container person_tsc.xml
--test-cases
--verbose
Report
Finally, you can generate a report out of the test session container person_tsc.xml
.
codecover report --container person_tsc.xml
--destination report.html
--session "JUnitTestSession"
--template CODECOVER_HOME/report-templates/HTML_Report_hierarchic.xml