Я пытаюсь запустить некоторые тесты в Ant в настоящее время, используя JUnit, и все мои тесты не выполняются со следующей трассировкой стека:
java.lang.ClassNotFoundException: com.mypackage.MyTestCase
Это не имеет для меня особого смысла.Сначала я компилирую свои тестовые примеры, используя <javac>
, а затем непосредственно запускаю задачу <junit>
для запуска тестов.Мой сборочный файл выглядит так:
<target name="compile.webapp.tests" depends="compile.webapp">
<javac srcdir="${test.java.src.dir}"
destdir="${test.java.bin.dir}">
<classpath>
<filelist>
<file name="${red5.home}/red5.jar"/>
<file name="${red5.home}/boot.jar"/>
<file name="${bin.dir}/${ant.project.name}.jar"/>
</filelist>
<fileset dir="${red5.lib.dir}" includes="**/*"/>
<fileset dir="${main.java.lib.dir}" includes="**/*"/>
<fileset dir="${test.java.lib.dir}" includes="**/*"/>
</classpath>
</javac>
</target>
<target name="run.webapp.tests" depends="compile.webapp.tests">
<junit printsummary="true">
<classpath>
<filelist>
<file name="${red5.home}/red5.jar"/>
<file name="${red5.home}/boot.jar"/>
<file name="${bin.dir}/${ant.project.name}.jar"/>
</filelist>
<fileset dir="${red5.lib.dir}" includes="**/*.jar"/>
<fileset dir="${main.java.lib.dir}" includes="**/*.jar"/>
<fileset dir="${test.java.lib.dir}" includes="**/*.jar"/>
<fileset dir="${test.java.bin.dir}" includes="**/*.class"/>
</classpath>
<formatter type="xml"/>
<batchtest todir="${test.java.output.dir}">
<fileset dir="${test.java.bin.dir}" includes="**/*TestCase*"/>
</batchtest>
</junit>
<junitreport>
<fileset dir="${test.java.output.dir}" includes="**/*"/>
<report todir="${test.java.report.dir}"/>
</junitreport>
</target>
Это действительно странно, я не могу это исправить.Я что-то здесь не так делаю?Структура каталога моего проекта выглядит примерно так:
${basedir}/src/test/java # this is "test.java.src.dir"
${basedir}/build/test/java # this is "test.java.bin.dir"
${basedir}/lib/main/java # this is "main.java.lib.dir"
${basedir}/lib/test/java # this is "test.java.lib.dir"
${basedir}/build/test/junit # this is "test.java.output.dir"
Мой полный файл сборки доступен здесь: http://pastebin.com/SVnciGKRМой файл свойств доступен здесь: http://pastebin.com/9LCtNQUq
ОБНОВЛЕНИЕ
Изменив мои цели так, как показано ниже, я смог заставить все работать.К сожалению, мне приходится вручную вставлять ant-junit.jar и junit.jar в мой репозиторий, но это работает, так что, думаю, это решит проблему.Если кто-нибудь может помочь мне избавиться от необходимости встраивать ant-junit.jar и junit.jar, я был бы очень признателен:
<path id="webapp.tests.path" >
<pathelement location="${red5.home}/red5.jar"/>
<pathelement location="${red5.home}/boot.jar"/>
<pathelement location="${bin.dir}/${ant.project.name}.jar"/>
<pathelement path="${red5.lib.dir}"/>
<pathelement path="${main.java.lib.dir}"/>
<pathelement path="${test.java.lib.dir}"/>
</path>
<target name="compile.webapp.tests" depends="compile.webapp">
<javac srcdir="${test.java.src.dir}"
destdir="${test.java.bin.dir}">
<classpath refid="webapp.tests.path"/>
</javac>
</target>
<target name="run.webapp.tests" depends="compile.webapp.tests">
<junit printsummary="true">
<classpath>
<path refid="webapp.tests.path"/>
<pathelement location="${test.lib.dir}/ant/ant-junit.jar"/>
<pathelement location="${test.lib.dir}/ant/junit-4.8.2.jar"/>
<pathelement path="${test.java.bin.dir}"/>
</classpath>
<formatter type="xml"/>
<batchtest todir="${test.java.output.dir}">
<fileset dir="${test.java.bin.dir}" includes="**/*TestCase*"/>
</batchtest>
</junit>
<junitreport todir="${test.java.report.dir}">
<fileset dir="${test.java.output.dir}" includes="**/*"/>
<report todir="${test.java.report.dir}"/>
</junitreport>
<delete file="${test.java.report.dir}/TESTS-TestSuites.xml"/>
</target>
Если я не включу банки в classpath,Я получаю сообщение об ошибке, сообщающее, что junit.jar должен быть в пути к классам, чтобы запустить задачу <junit>
.Странно, да?