Junit Ant Jenkins ClassNotFoundException

时间:2014-02-24 17:42:26

标签: java ant junit

我正在通过ant运行Jenkins上的Junit测试,我真的遇到了这个错误。

我的ant文件的相关部分:

<!-- Get the Junit test files -->
<target name="getTest">
    <svn svnkit="false" javahl="false">
        <export srcUrl="${svn.junit}" destPath="${junit.dir}" />
    </svn>
</target>
<!-- Compile Junit Test Files -->
<target name="test-compile" depends="compileJava">
    <javac srcdir="${junit.dir}" target="1.6" source="1.6" destdir="${test.classes}">
        <classpath>
            <path refid="test.classpath" />
            <pathelement location="${test.classes}" />
        </classpath>
    </javac>
</target>

<!-- Run JUnit Tests -->
<target name="test" depends="test-compile">
    <junit haltonfailure="no" failureproperty="failed">
        <classpath>
            <path refid="test.classpath" />
            <pathelement location="${test.classes}" />
        </classpath>
        <formatter type="xml" />
        <batchtest fork="yes" todir="${test.reports}">
            <fileset dir="${junit.dir}">
                <include name="**/*Test*.java" />
            </fileset>
        </batchtest>
    </junit>
    <fail message="TEST FAILER" if="failed" />
</target>

<path id="test.classpath">
    <pathelement location="${basedir}/junit-4.11.jar" />
    <pathelement location="${basedir}/ant-junit-1.8.4.jar" />
    <pathelement location="${build.classes.dir}" />
    <pathelement location="${build.lib.dir}" />
    <pathelement location="${source.dir}" />
</path> 

测试编译到test-classes文件夹中并使用控制台输出在测试中运行: [junit] Test com.some.app.ProjectName.MyTestClass FAILED

当您在测试结果中查看测试时,它会显示堆栈跟踪

java.lang.ClassNotFoundException: com.some.app.ProjectName.MyTestClass
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)

1 个答案:

答案 0 :(得分:0)

junit documentation描述了batchtest操作,如下所示:

  

根据模式匹配定义一些测试。

     

batchtest 从任意数量的嵌套资源集合中收集包含的资源。然后,它为每个以 .java .class 结尾的资源生成测试类名称。

因此,这暗示了“test-compile”目标的问题,因为缺少的是从以下文件集派生的类名:

<fileset dir="${junit.dir}">
    <include name="**/*Test*.java" />
</fileset>

虽然ANT文件看起来不错,但您是否有可能错过Java源代码顶部的“包”声明?我被抓了一次....查看$ {test.classes}目录,仔细检查没有匹配的类文件。