#java #ant #build #junit #junit4
#java #ant #сборка #junit #junit4
Вопрос:
Я автоматизирую свои тесты JUnit в своей сборке Ant. Однако мой простой тест проходит только при запуске из IDE и командной строки, но завершается неудачно с <junit>
задачей Ant. Когда я запускаю его из командной строки (технически я использую задачу Ant <exec>
), результат:
clean:
compile_tests:
[javac] Compiling 2 source files to C:MY_TEMP
junit_exec:
[exec] JUnit version 4.10
[exec] .
[exec] Time: 0.004
[exec]
[exec] OK (1 test)
[exec]
BUILD SUCCESSFUL
Total time: 1 second
но когда я использую <junit>
задачу:
Buildfile: C:MY_TEMPbuild.xml
clean:
compile_tests:
[javac] Compiling 2 source files to C:MY_TEMP
junit_ant:
[echo] junit_ant started
[junit] Test SimpleTest FAILED
BUILD SUCCESSFUL
Total time: 0 seconds
Содержимое MY_TEMP
junit-4.10.jar
, SimpleTest.java
, и build.xml
.
Я скопировал junit-4.10.jar
в %ANT_HOME%lib
папку, как указано в документации Ant junit task. У него уже были оба ant-junit.jar
и ant-junit4.jar
.
Моя версия Java — 1.6.0_26.
Мой тест:
// YES, this is the default package
import org.junit.*;
public class SimpleTest {
@Test
public void mySimpleTest(){
Assert.assertEquals( 2, 1 1 );
}
}
И мой файл Ant (build.xml ), является:
<?xml version="1.0"?>
<project name="regression_tests" basedir=".">
<target name="clean">
<delete>
<fileset dir="." includes="*.class" />
</delete>
</target>
<target name="compile_tests" depends="clean">
<javac srcdir="." destdir="." source="1.6" target="1.6" includeantruntime="false" >
<classpath>
<pathelement location="./junit-4.10.jar" />
</classpath>
</javac>
</target>
<target name="junit_ant" depends="compile_tests" >
<echo message="junit_ant started" />
<junit>
<test name="SimpleTest" />
</junit>
</target>
<target name="junit_exec" depends="compile_tests">
<exec executable="java" dir="." >
<arg value="-classpath" />
<arg value=".;junit-4.10.jar" />
<arg value="org.junit.runner.JUnitCore" />
<arg value="SimpleTest" />
</exec>
</target>
</project>
Комментарии:
1. В чем ошибка теста?
2. Как бы мне это выяснить? Даже с
-v
опцией, предоставленной Ant, он ничего не печатает о сбое. Судя по самому тесту, который не может завершиться неудачей, я полагаю, что мне, должно быть, чего-то не хватает с точки зрения конфигурации.3. Посмотрите в отчете о тестировании?
4. Где бы это найти? Я предполагаю, что это опция, которую необходимо включить? Я пробовал оба
enableTestListenerEvents="true"
иlogfailedtests="yes"
. Я привык к отчетам Maven о верных результатах.5. Неважно, нашел, как создавать отчеты отсюда: junit.sourceforge.net/doc/faq/faq.htm#running_6
Ответ №1:
Если тест проходит одним способом и завершается другим, скорее всего, это связано с путем к классу, например, он не может найти тестовый класс, тестируемый класс или библиотеку.
Вывод теста должен помочь уточнить, в чем проблема.
Ответ №2:
В частности, я отредактировал свою junit_ant
задачу на:
<junit>
<classpath location="." />
<test name="SimpleTest" />
<formatter type="xml" />
</junit>
<junitreport todir=".">
<fileset dir=".">
<include name="TEST-*.xml" />
</fileset>
<report todir="." />
</junitreport>
Который затем показал мне, что сбой был java.lang.ClassNotFoundException: SimpleTest
, поэтому я просто добавил <classpath location="." />
к <junit>
задаче, а затем она сработала.
Ответ №3:
Добавьте эту строку для получения дополнительной информации:
<formatter type="brief" usefile="false"/>