Alexiuscrow
@Alexiuscrow

Как протестировать java-классы из-под ant?

Не получается протестить java-классы из под ant-а.
Помимо дефолтных папок в корне проекта создал еще 2 папки:
1я - "classes" (сюда скидываю результаты компиляции классов);
2я - "test" (содержит такой же пакет (имя пакета/адрес) как и в src, но с тестовым классом).

75e961d25590.png

Подскажите, как в "build.xml" правильно описать таргет для теста?
  • Вопрос задан
  • 3837 просмотров
Решения вопроса 1
Alexiuscrow
@Alexiuscrow Автор вопроса
Всё же сделал...
  1. Перекину папку с тестом в src, в пакет "com.mntu.java.lab1.test" (не принципиально).
    Таким образом вместе с компиляцией моих тестируемых исходников я компилирую и исходник с тестом.
  2. для того что бы javac не ругался на неизвестные ему методы в тесте - к javac в ant-е добавил classpath с прописанным путём к файлу junit-4.10.jar (который я предварительно скопипастил из External Libraries в корень проекта).
  3. и ant:
<property name="destclass" value="classes" description="Куда сохранить классы"/>
 
<target name="compile">
    <javac  srcdir="./src" destdir="${destclass}" classpath="./junit-4.10.jar"/>
</target>
 
<target name="jtest" depends="compile">
    <junit printsummary="on" showoutput="on">
        <test name="com.mntu.java.lab1.test.TestArtist"/>
        <classpath>
            <pathelement location="junit-4.10.jar"/>
            <pathelement location="${destclass}"/>
        </classpath>
    </junit>
</target>

Скрин дерева файлов проекта
4b1c6405ccc1.png
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Для запуска тестов вам необходимо передать junit две path-структуры: classpath и скомпилированные тесты. В classpath (в примере это переменная ${test.classpath}) передаются все необходимые для выполнения тестов библиотеки и тестируемые классы.
В параметр dir нужно передать скомпилированные тесты. Следите за тем, чтобы туда не попадали вспомогательные классы из /test, так как junit попытается их выполнить.

Пример:
<target name="init-test" depends="prepare">
                <path id="test.classpath">
			<fileset dir="${lib}">
				<include name="*.jar" />
			</fileset>
			<pathelement location="${project.classes.build}" />
			<pathelement path="${test.build}" />
			<pathelement path="${test.build}/etc" />
			<pathelement path="${test.build}/etc/test" />
			<pathelement path="${test.build}/etc/mappings" />
		</path>
		<fileset id="test.fileset" dir="${test}">
			<include name="**/${test.class.pattern}.java"/>
			<exclude name="**/Abstract${test.class.pattern}.java"/>
			<exclude name="**/Base${test.class.pattern}.java"/>
			<exclude name="**/TestUtils.java"/>
		</fileset>
		<copy todir="${test.build}/etc/test">
			<fileset dir="${etc}/test"/>
		</copy>
		<copy todir="${test.build}/etc/test">
			<fileset dir="${etc}/mappings"/>
		</copy>
		<copy file="${etc}/hibernate.cfg.xml" todir="${test.build}/etc"/>
	</target>

	<target name="compile-test" depends="compile, run-checks">
		<javac srcdir="${test}"
			destdir="${test.build}"
			classpathref="run.classpath"
			source="${minimum.javaversion}"
			target="${minimum.javaversion}"
			debug="${debug.mode}"
			encoding="UTF-8"
			includeantruntime="no" />
		<copy todir="${test.build}">
			<fileset dir="${test}">
				<exclude name="**/*.java" />
			</fileset>
		</copy>
	</target>

	<target name="run-test" depends="init-test, compile-test">
		<mkdir dir="${test.xml}" />

		<junit 
			haltonfailure="off"
			haltonerror="off"
			errorproperty="test.failed"
			failureproperty="test.failed"
			showoutput="no"
			printsummary="yes"
			includeantruntime="yes"
			dir="${test.build}"
			fork="true">
			<jvmarg value="-Dfile.encoding=UTF8"/>
			<classpath>
				<path refid="test.classpath" />
			</classpath>
			<formatter type="xml"/>
			<batchtest todir="${test.xml}">
				<fileset refid="test.fileset" />
			</batchtest>
		</junit>
	</target>

	<target name="test" depends="run-test" description="Run unit tests">
		<fail if="test.failed"
			message="At least one test has failed. See logs (in ${test.xml}) for details (use the target test-report to run the test with a report)" />
	</target>
Ответ написан
Комментировать
Classpath должен содержать пути до классов, а не до исходников. Поэтому
<pathelement location="classes"/>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы