# Ant + Junit + Testclass in Jar



## mephi (10. Mai 2007)

Hi, ich habe das problem, dass ich mit dem ant task junit eine testklasse ausführen soll. Diese Testklasse liegt in einem Vorgabeprojekt das vorher kompiliert und in einer jar gepackt werden soll...
allerdings schlägt der junit task fehl. ich schätze mal es liegt daran dass die testklasse in dem jar ist. 

meine build.xml:


```
<target name="junit" depends="compile_main">
		<junit printsummary="yes" haltonerror="no" haltonfailure="no" fork="yes">
		   <formatter type="xml" />
			<classpath>
				<pathelement path=""/>
				<fileset dir="lib">
					<include name="**/*.jar"/>
				</fileset>
			</classpath>
		   <test todir="${reports.dir}"  name="${testclass}" fork="true"/>
		</junit>
		<junitreport todir="${reports.dir}">
		   <fileset dir="${reports.dir}">
		      <include name="TEST-*.xml"/>
		   </fileset>
		   <report todir="${reports.dir}" format="frames"/>
		</junitreport>
	</target>
```

die wohl interessanten zeilen.. 


```
[junit] Running /de/hhn/se/mi/clock/tests/AllTests.class
    [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec
    [junit] Test /de/hhn/se/mi/clock/tests/AllTests.class FAILED (crashed)
```

komplette meldung:


```
junit:
    [junit] Exception in thread "main" Unable to open file F:\workspace\Clock_07_SS - Winckler\build\docs\reports\TEST-\de\hhn\se\mi\clock\tests\AllTests.class.xml
    [junit] at org.apache.tools.ant.taskdefs.optional.junit.FormatterElement.createFormatter(FormatterElement.java:265)
    [junit] at org.apache.tools.ant.taskdefs.optional.junit.FormatterElement.createFormatter(FormatterElement.java:214)
    [junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.transferFormatters(JUnitTestRunner.java:818)
    [junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:910)
    [junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:766)
    [junit] Caused by: java.io.FileNotFoundException: F:\workspace\Clock_07_SS - Winckler\build\docs\reports\TEST-\de\hhn\se\mi\clock\tests\AllTests.class.xml (Das System kann den angegebenen Pfad nicht finden)
    [junit] at java.io.FileOutputStream.open(Native Method)
    [junit] at java.io.FileOutputStream.<init>(Unknown Source)
    [junit] at java.io.FileOutputStream.<init>(Unknown Source)
    [junit] at org.apache.tools.ant.taskdefs.optional.junit.FormatterElement.createFormatter(FormatterElement.java:263)
    [junit] ... 4 more
    [junit] --- Nested Exception ---
    [junit] java.io.FileNotFoundException: F:\workspace\Clock_07_SS - Winckler\build\docs\reports\TEST-\de\hhn\se\mi\clock\tests\AllTests.class.xml (Das System kann den angegebenen Pfad nicht finden)
    [junit] at java.io.FileOutputStream.open(Native Method)
    [junit] at java.io.FileOutputStream.<init>(Unknown Source)
    [junit] at java.io.FileOutputStream.<init>(Unknown Source)
    [junit] at org.apache.tools.ant.taskdefs.optional.junit.FormatterElement.createFormatter(FormatterElement.java:263)
    [junit] at org.apache.tools.ant.taskdefs.optional.junit.FormatterElement.createFormatter(FormatterElement.java:214)
    [junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.transferFormatters(JUnitTestRunner.java:818)
    [junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:910)
    [junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:766)
    [junit] Running /de/hhn/se/mi/clock/tests/AllTests.class
    [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec
    [junit] Test /de/hhn/se/mi/clock/tests/AllTests.class FAILED (crashed)
[junitreport] Processing F:\workspace\Clock_07_SS - Winckler\build\docs\reports\TESTS-TestSuites.xml to C:\DOKUME~1\Andi\LOKALE~1\Temp\null1137685609
[junitreport] Loading stylesheet jar:file:/F:/i3G/apache-ant-1.7.0/lib/ant-junit.jar!/org/apache/tools/ant/taskdefs/optional/junit/xsl/junit-frames.xsl
[junitreport] Transform time: 844ms
[junitreport] Deleting: C:\DOKUME~1\Andi\LOKALE~1\Temp\null1137685609
BUILD SUCCESSFUL
Total time: 5 seconds
```


mit eclipse lief das wunderbar. ich musste nur im vorgabeprojekt auf die "AllTests.java" dann -> "run.." -> nud als project mein project angeben.
die klasse liest dann aus einer properties-datei aus meinem projekt aus wo sich meine "hauptklasse" befindet und instanziert dann davon objekte für die tests...

weiß jemand rat? 

edit: hmm was auch seltsam ist: 
	
	
	
	





```
[junit] Exception in thread "main" Unable to open file F:\workspace\Clock_07_SS - Winckler\build\docs\reports\TEST-\de\hhn\se\mi\clock\tests\AllTests.class.xml
```

warum sucht er da eine AllTests.class.*xml* ?


----------



## kama (10. Mai 2007)

HI,

weil aus den .xml Dateien die Reports in HTML erzeugt werden.

MfG
Karl Heinz Marbaise


----------



## mephi (10. Mai 2007)

ok. und warum kann er das file nicht öffnen?
ist etwas an meiner build.xml falsch?


----------



## mephi (10. Mai 2007)

ok.. hab das verzeichniss mit "/" angegeben. er will aber "." haben 

allerdings bekomm ich nun ein neuen fehler.. aber das hab ich glaub hier im forum schon gelesen..


```
junit:
    [junit] Running de.hhn.se.mi.clock.tests.AllTests.class
    [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec
    [junit] Test de.hhn.se.mi.clock.tests.AllTests.class FAILED
```


edit:
hm naja bekomms nicht hin.
der testklasse wird zwar richtig gestartet aber die versucht dann eine factoryklasse aufzurufen die er nicht findet..
habe aber den pfad in den classpath aufgenommen..


```
<system-err><![CDATA[10.05.2007 20:36:12 de.hhn.se.wnck.utils.testutils.FactoryFactory loadFactory
INFO: Versuche, die Klasse net.aboettch.test.MyClockFactory als Implementierung für die Klasse simplealarmclock.clockfactory zu instantiieren
java.lang.ClassNotFoundException: net.aboettch.test.MyClockFactory
```


----------

