无法从Ant运行JUnit

时间:2010-01-13 14:07:43

标签: java ant junit

这是我用来运行测试的目标:

<target name="run-tests" description="run the tests" depends="compilation">
        <junit>
            <sysproperty key="tests.basedir" value="${SPECIAL_PATH}/unit_tests"/>
            <classpath>
                <pathelement location="${COMPILED_CLASSES}"/>
                <pathelement location="${basedir}/junit-4.8.1.jar"/>
            </classpath>
            <batchtest>
                <fileset dir="${COMPILED_CLASSES}/unit_tests/">
                    <include name="**/Test*.class"/>
                    <exclude name="**/*$*"/>
                </fileset>
            </batchtest>
        </junit>
    </target>

但是,每次我尝试运行此目标时,我的所有测试都会失败,例如:

[junit] java.lang.ClassNotFoundException: testpackage.TestMyClass
[junit]     at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
[junit]     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
[junit]     at java.lang.Class.forName0(Native Method)
[junit]     at java.lang.Class.forName(Class.java:247)

SPECIAL_PATH属性指向类的源代码。 COMPILED_CLASSES属性指向.class个文件的放置位置。我需要tests.basedir属性,因为我在单元测试中使用它。

我做错了什么?

编辑:我还认为我应该解释$的排除。我排除了匿名类,因为它们不代表TestCases,它们只是从它们中使用。

3 个答案:

答案 0 :(得分:3)

您告诉Junit在${COMPILED_CLASSES}/unit_tests/中执行每个测试类,但是您只在类路径上放置${COMPILED_CLASSES}。您可能需要将类路径条目更改为

<pathelement location="${COMPILED_CLASSES}/unit_tests/"/>

答案 1 :(得分:1)

因为你的claspath已经

${COMPILED_CLASSES}

并且您的测试类位于

${COMPILED_CLASSES}/unit_tests

他们需要在包中

unit_tests.<whatever the classpath is>

传统上这就是为什么人们将正常的源代码编译到目标/类并将源代码测试到目标/测试类

的原因

答案 2 :(得分:0)

您可能需要编译UnitTests。你能发布使用javac任务的地方吗?