# ANT - Kompilieren von JUnit-Tests



## Humpatz (12. Dez 2008)

Hallo liebe Community,

ich habe ein kleines Problem bei der Erstellung meines Ant-Skriptes und hoffe ihr könnt mir weiterhelfen.

Folgende Ordner-Struktur existiert:
-ProjectRoot
     - src
     - test

in den Verzeichnissen src und test gibt es jeweils noch mehrere Unterverzeichnisse, in denen dann die .java-Files liegen.

das Kompilieren der src-Dateien klappt ohne Probleme mit:
  <target name="compile.java" depends="compile.prepare">
    <javac srcdir="${homeSrc}" destdir="${home}/${build}" source="${java.source}" target="${java.target}"
      debug="${java.debug}" deprecation="${java.deprecation}"
    	includes="package1/**, package2/**">
    	<classpath refid="classpath.javac"/>
    </javac>
  </target>

die kompilierten Dateien werden dabei in das Verzeichnis ProjectRoot\build\ gelegt


Nun hatte ich vor, die junit-Dateien analog dazu kompilieren zu lassen, jedoch bekomme ich für die .java-Datei FileLoaderTest.java folgenden javac-Fehler:

```
[javac] D:\Project\test\unit\package1\FileLoaderTest.java:28: cannot find symbol
[javac] symbol  : class FileLoader
[javac] location: class FileLoader.FileLoaderTest
[javac] FileLoader fileLoader = null;
```

FileLoaderTest.java hat dabei folgenden Inhalt:

```
public class FileLoaderTest extends TestCase
{
	FileLoader fileLoader = null;
        ........
}
```

Meine Vermutung ist nun, dass ich zum Kompilieren der Unit-Test auch irgendwie die Verbindung zu den eigentlichen Source-Dateien herstellen muss. Ich habe schon versucht aus den kompilierten src-Dateien eine Jar zu bauen und diese dann dem Klassenpfad, der zum Kompilieren der Tests verwendet wird, mitzugeben. Hat aber auch nicht funktioniert.

Könnt ihr mir vielleicht behilflich sein. Solltet ihr weitere Infos zum Skript o.ä. brauchen, immer raus damit!

Vielen Dank!


----------



## maki (12. Dez 2008)

Zuerst müssen die "normalen" Klassen kompiliert werden, danach die UnitTests.


----------



## Humpatz (12. Dez 2008)

das wird schon erledigt, trotzdem funktioniert es aus für mich unerklärlichen Gründen nicht, die JUnit-Dateien zu kompilieren

woran kann es liegen, dass beim Kompilieren der Testdateien nicht auf die kompilierten src-klassen zurückgegriffen werden kann bzw. wo und wie muss ich das beim kompilieren der junit-tests angeben?


----------



## Ebenius (12. Dez 2008)

Haste beim Kompilieren der JUnit-Tests auch "${home}/${build}" im CLASSPATH? Die Sourcen brauchst Du dabei nicht. Ebenius


----------



## FArt (12. Dez 2008)

Am besten man führt immer (mindestens) zwei ClassPathRefs .. eines mit den produktiven Klassen, eines mit den produktiven Klassen und den Testklassen.

Je nachdem an welcher Stelle du dich gerade befindest, verwendest du den einen oder den anderen.


----------



## Humpatz (12. Dez 2008)

nach weiterem rumprobieren folgende verwunderliche erkentnisse.
hier ist erstmal mein classpath. ich verwende zum kompilieren der sourcen sowie zum kompilieren der junit-files den gleichen classpath.


```
<path id="classpath.javac">
      <fileset dir="${jre}">
        <include name="**/*.jar"/>
        <include name="**/*.zip"/>
      </fileset>
      <fileset dir="${home}/src/lib">
        <include name="**/*.jar"/>
        <include name="**/*.zip"/>
      </fileset>
	  <pathelement location="${home}/${build}"/>
</path>
```


diesen classpath habe ich versucht zu erweitern, indem ich ein zusätzliches fileset angegeben habe, indem sich bspw. die junit.jar befindet:

```
<fileset dir="${home}/test/unit/lib">
        <include name="**/*.jar"/>
        <include name="**/*.zip"/>
</fileset>
```


zusätzlich habe ich den classpath noch beim aufruf der junit-kompilierung um die project.jar aus den kompilierten sourcen ergänzt:

```
<javac
...
classpath="${classpath.javac};${homeJUnit}/lib/isbz.jar 
includes="isbz/**, FileLoader/**">
</javac>
```

das hatte zur Folge, dass der Fehler mit den fehlenden Klassensymbolen verschwunden war, jedoch wird jetzt folgendes bemängelt:

```
[javac] D:\Project\test\unit\package1\FileLoaderTest.java:14: package junit.framework does not exist
[javac] import junit.framework.TestCase;
```

der kompiler kann also offensichtlich die junit.jar nich finden, obwohl ich auf sie im klassenpfad referenziere. Komisch!


----------



## palstic-karma (27. Sep 2010)

Hallo,
ich habe hier das gleiche Problem. Wenn ich ant "-v" als Parameter mitgebe, ist klar zu sehen, dass der javac Task mit der Option -classpath "...;Pfad/junit-4.4.jar;..." aufgerufen wird. Allerdings kommt trotzdem der Compilefehler

cannot find symbol
[javac] symbol  : constructor TestCase()

Hat jemand eine Idee ?


----------



## plastic-karma (27. Sep 2010)

Entschuldigt die vorschnelle Frage. Mein Problem hat sich erledigt. Auf dem Classpath war noch eine ältere Version von Junit. Nachdem ich diese entfernt habe, funktionierte alles wunderbar.


----------

