У меня есть проект Java, в котором есть каталог «src» для кода, непосредственно связанного с моим проектом, и каталог «test», который Тесты JUnit, которые работают с кодом в каталоге src. Структуры справочника таковы:Исходные и тестовые каталоги «источника» - как я могу запускать тесты из теста с источником
ROOT/src/com/mycompany/decoders/qDecoder/.....
ROOT/test/com/mycompany/decoders/qDecoder/.....
Оба каталога имеют ту же самую структуру упаковки.
Следующая является объектом и связанной с JUnit информация:
<property name="src_classes_dir" value="./bin"/>
<property name="test_classes_dir" value="./binTest"/>
<path id="junit.classpath">
<pathelement location="${src_classes_dir}"/>
<pathelement location="${test_classes_dir}"/>
<pathelement location="${CommonJarPath}/JUnit/junit.jar"/>
<pathelement location="${CommonJarPath}/JavaMail/mailapi.jar"/>
<pathelement location="${CommonJarPath}/JavaMail/smtp.jar"/>
<pathelement location="${CommonJarPath}/CommonsLang3/commons-lang3.jar"/>
<pathelement location="${CommonJarPath}/JDBC/inetsoftware/merlia/8.0.2/Merlia.jar"/>
<pathelement location="${CommonJarPath}/JodaTime/joda-time.jar"/>
</path>
<property name="test_dir" value="./test"/>
<target name="junit" description="Run JUnit tests" depends="compile_source, compile_test">
<junit fork="yes" haltonfailure="yes" haltonerror="yes" showoutput="yes">
<formatter type="plain" usefile="no"/>
<classpath refid="junit.classpath"/>
<batchtest>
<fileset dir="${test_dir}" />
</batchtest>
</junit>
</target>
Итак, мои тестовые файлы (*.java)
в ${test_dir}
. Тестовые классы находятся в ${test_classes_dir}
, а тестируемые классы находятся в ${src_classes_dir}
. Оба они перечислены в справочнике junit.classpath
.
Все цели будут завершены, «чистый», «приготовительные», «src_compile» и «test_compile» вплоть до «JUnit» цели, то я получаю ClassNotFoundException
на первом же тесте AMCiBitsTest
. Так что он знает о тесте, но по какой-то причине не может найти свой класс.
Вот след исключение:
junit:
[junit] Testsuite: com.amci.util.AMCiBitsTest
[junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec
[junit]
[junit] Caused an ERROR
[junit] com.amci.util.AMCiBitsTest
[junit] java.lang.ClassNotFoundException: com.amci.util.AMCiBitsTest
[junit] at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
[junit] at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
[junit] at java.security.AccessController.doPrivileged(Native Method)
[junit] at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
[junit] at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[junit] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
[junit] at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[junit] at java.lang.Class.forName0(Native Method)
[junit] at java.lang.Class.forName(Class.java:190)
[junit]
Я в тупик. Что я делаю не так? Почему это не может пройти тест AMCiBitsTest
и все остальные тесты?
Не могли бы вы предоставить stacktrace класса ClassNotFoundException. –
попробуйте установить ' ' to ' ', очевидно, есть ваши скомпилированные тестовые классы. не уверен, что он решает проблему. –
Claudiu
Вы компилировали свой код _test_? Вы должны скомпилировать '* .java'' '.class' в своем тестовом источнике, прежде чем вы сможете запустить JUnit на них. –