Тест Junit, интегрированный с Ant Failed с ClassNotFoundException - PullRequest
6 голосов
/ 08 августа 2011

У меня есть тесты JUnit для моего проекта, которые корректно работают с Eclipse.

Итак, теперь я пытаюсь объединить эти тесты с задачей муравья. Для этого я делаю следующий скрипт:

<path id="classpath-test">
    <pathelement path="." />
    <pathelement path="${classes.home}" />
    <fileset dir="${lib.home}" includes="*.jar" />
    <fileset dir="${libtest.home}" includes="*.jar" />
</path>

    <target name="compile" ... > // compiles src code of the project

<target name="compile-tests" depends="compile">
    <javac  srcdir="${test.home}"
            destdir="${testclasses.home}" 
            target="1.5"
            source="1.5" 
            debug="true"
        >
        <classpath refid="classpath-test" />
    </javac>

    <copy todir="${testclasses.home}">
        <fileset dir="${test.home}">
            <exclude name="**/*.java"/>
        </fileset>
    </copy>
</target>

<target name="unit-test" depends="compile-tests">
    <junit printsummary="false" fork="off" haltonfailure="true">
        <classpath refid="classpath-test" />

        <formatter type="brief" usefile="false" />

        <test name="com.test.MyTest" />

        <!--<batchtest todir="${reports.dir}" >
            <fileset dir="${testclasses.home}" >
                <exclude name="**/AllTests*"/>
                <include name="**/*Test.class" />
            </fileset>
        </batchtest>-->
    </junit>
</target>

Каталог $ {libtest.hom} содержит junit-4.8.1.jar и hamcrest-core-1.1.jar.

Когда я запускаю следующую команду: ant unit-test, выполнение MyTest завершается неудачно со следующим выводом:

unit-test:
[junit] Testsuite: com.test.MyTest
[junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec
[junit]
[junit] Null Test:  Caused an ERROR
[junit] com.test.MyTest
[junit] java.lang.ClassNotFoundException: com.test.MyTest
[junit]     at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
[junit]     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
[junit]     at java.lang.Class.forName0(Native Method)
[junit]     at java.lang.Class.forName(Class.java:247)
[junit]
[junit]

Это очень странно, потому что com.test.MyTest находится в пути к классам, указанному для моей задачи junit в скрипте ant. У кого-нибудь была бы и идея решить эту проблему?

Спасибо за вашу помощь.

Sylvain.

1 Ответ

3 голосов
/ 08 августа 2011

Каталог ${testclasses.home} нигде не находится на пути к классам для задачи <junit>.

Я думаю, что именно здесь находится файл класса для com.test.MyTest.

Вот модифицированный модульный тестцель:

<target name="unit-test" depends="compile-tests">
    <junit printsummary="false" fork="off" haltonfailure="true">
        <classpath>
          <path refid="classpath-test"/>
          <fileset dir="${testclasses.home}"/>
        </classpath>

        <formatter type="brief" usefile="false" />

        <test name="com.test.MyTest" />

        <!--<batchtest todir="${reports.dir}" >
            <fileset dir="${testclasses.home}" >
                <exclude name="**/AllTests*"/>
                <include name="**/*Test.class" />
            </fileset>
        </batchtest>-->
    </junit>
</target>
...