2014-02-24 112 views
0

我正在通过蚂蚁对Jenkins运行Junit测试,并且我真的被这个错误困住了。Junit蚂蚁詹金斯ClassNotFoundException

我的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> 

测试编译成测试类文件夹,并在测试与控制台输出运行: [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) 

回答

0

junit documentation描述了如下的批量测试操作:

定义一些基于模式匹配的测试。

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

因此,这暗示了与“测试编译”目标的一个问题,因为现在缺少的是从下列文件集派生的类名称:

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

虽然ANT文件看起来不错,是有你有没有机会错过Java源代码顶部的“包”声明?我曾经被捕获过一次....查看$ {test.classes}目录,仔细检查是否没有匹配的类文件。

+0

是的,它是包声明。谢谢。 – Cole9350