# Junit Reports sind leer



## MichaelP (25. Okt 2011)

Ich benutze Junit für Unit Tests und ein Ant Script:
[XML]<target name="UnitTests">		
		<junit printSummary="true" showOutput="true" fork="yes">			
			<!-- <formatter type="brief" usefile="false"/> -->
			<formatter type="xml"/>
			<!-- <formatter type="plain" usefile="false" /> -->
			<classpath >
				<pathelement location="${bin_dir}"/>
				<pathelement path="${clover.jar}"/>
			</classpath>
			<batchtest>
				<fileset dir="${bin_dir}">
					<include name="*Test.class"/>
				</fileset>
			</batchtest>			
		</junit>
		<junitreport todir="${report_dir}/junit/xml">
			<fileset dir="${report_dir}/junit/xml">
				<include name="TEST-*.xml"/>
			</fileset>
			<report format="frames" todir="${report_dir}/junit/html"/>
		</junitreport>
	</target>[/XML]
Das Problem ist, dass zwar die Dateien erstellt werden, allerdings ohne Daten. Die Datei TESTS-TestSuites.xml hat zum Beispiel nur folgenden Inhalt:
[XML]<?xml version="1.0" encoding="UTF-8" ?>
<testsuites />
[/XML]

Aber es gibt noch eine weiter Datei: TEST-CalcTest.xml. In dieser steht was drin, aber von wem wird diese erzeugt? Von Ant oder JUnit?


----------



## maki (25. Okt 2011)

Vom junitreport Task 

IMHO ist das kein problem, sondern absicht.
Die statische Testsuite aggregiert nur Tests, einzelne Ergebnisse gibt es IMHO nur zu einzelnen Testklassen.


----------



## MichaelP (26. Okt 2011)

Das heißt, ich müsste für jeden Test einzeln einen Report generieren lassen oder wie?

Meine Testklasse sieht so aus:

```
import static org.junit.Assert.*;
import org.junit.Test;

public class CalcTest {
	
	@Test
	public void testAdd() throws CalcException{
		Calc calc = new Calc();
		assertEquals(8.0, calc.add(3, 5));
		assertEquals(-2.0, calc.add(3, -5));
		assertEquals(42.0, calc.add(40, 2));
	}
	
	@Test
	public void testMinus() {
		Calc calc = new Calc();
		assertEquals(-2.0, calc.minus(3.0, 5.0));
	}
}
```
Was müsste ich jetzt ändern, dass ich dafür die berichte bekomme?


----------



## MichaelP (31. Okt 2011)

So, ich habe ja definitiv keine Testsuit. Die build.xml Datei habe ich jetzt so geändert, dass die Tests einzeln gemacht werden.
Testklasse in der Datei Projekt\srcTest\CalcTest.java

```
public class CalcTest {
	
	@Test
	public void testAdd() throws CalcException{
		Calc calc = new Calc();
		assertEquals(8.0, calc.add(3, 5));
		assertEquals(-2.0, calc.add(3, -5));
		assertEquals(42.0, calc.add(40, 2));
	}
	
	@Test
	public void testMinus() {
		Calc calc = new Calc();
		assertEquals(-2.0, calc.minus(3.0, 4.0));
	}
}
```
Die binäre Version liegt dann im Ordner Projekt\bin\CalcTest.class

Meine Ant build-Datei sieht wie folgt aus:
[XML]<?xml version="1.0"?>

<project name="Ant-JUnit" default="" basedir=".">
	<description>Build file</description>

	<property name="src_dir" location="./src"/>
	<property name="srcTest_dir" location="./srcTest"/>
	<property name="bin_dir" location="./bin"/>	
	<property name="report_dir" location="./reports"/>

	<target name="Cleanup">
		<delete verbose="true">
			<fileset dir="${bin_dir}">				
	    		<include name="*.class"/>				
			</fileset>
		</delete>
		<delete verbose="true">
			<fileset dir="./">				
	    		<include name="TEST-*.xml"/>				
			</fileset>
		</delete>
		<delete verbose="true" dir="${report_dir}"/>	
		<mkdir dir="${report_dir}/junit/html"/>
		<mkdir dir="${report_dir}/junit/xml"/>
	</target>

	<target name="BuildProject">
		<mkdir dir="${bin_dir}"/>
		<javac destdir="${bin_dir}" verbose="true">			
			<src>
				<pathelement location="${src_dir}"/>
				<pathelement location="${srcTest_dir}"/>
			</src>				
		</javac>
	</target>

	<target name="UnitTests">		
		<junit printSummary="true" showOutput="true" fork="yes">						
			<formatter type="xml"/>			
			<classpath >
				<pathelement location="${bin_dir}"/>
				<pathelement location="${srcTest_dir}"/>
				<pathelement path="${clover.jar}"/>
			</classpath>			
			<test name="srcTest.CalcTest.testAdd"/>	
			<test name="CalcTest.testMinus"/>
		</junit>
		<junitreport todir="${report_dir}/junit/xml">
			<fileset dir="${report_dir}/junit/xml">
				<include name="TEST-*.xml"/>
			</fileset>
			<report format="frames" todir="${report_dir}/junit/html"/>
		</junitreport>
	</target>	
</project>[/XML]
Als Ergebnis erhalte ich zwei XML-Dateien mit den Namen der Testklassen: TEST-CalcTest.testAdd.xml. allerdings auch mit folgender Fehlermeldung am Ende dieser Dateien:
[XML]<error message="CalcTest.testAdd" type="java.lang.ClassNotFoundException">java.lang.ClassNotFoundException: CalcTest.testAdd[/XML]
Und die Berichte im Ordner Projekt\report\junit\xml und Projekt\report\junit\html sind immer noch ohne Daten. Sie beinhalten nur das Grundgerüst. Bzw. Die Datei TESTS-TestSuites.xml nur:
[XML]<?xml version="1.0" encoding="UTF-8" ?>
<testsuites />[/XML]
Dabei gibt es doch gar keine Testsuit.


----------

