我似乎无法通过Ant运行我的junit测试。这是我的设置:
的build.xml http://pastebin.com/c7n4cdJ6
我想做什么?我分别运行ant main
或ant package
。 compile
目标编译我的代码。首先是我的webapp的类,然后是我的测试类:
javac
:source:webapp java files,destination:${web.classes.dir}
javac
:source:test java files,destination:${web.testclasses.dir}
对于依赖关系管理,我使用Apache Ivy,它工作正常。
因此,让我们来看看我的junit
目标。您可以看到类路径是在junit.classpath
中定义的。它包含:
<path refid="test.path"/>
<pathelement location="${web.testclasses.dir}"/>
<pathelement location="${web.classes.dir}"/>
dirset
我编译的测试类(你看我绝望了)。因此,当我运行ant脚本编译得很好时,类文件就在那里。但是当谈到junit目标并且正在执行第一个测试时,我在控制台中出现了这个错误:
[junit] Running CreateStopwordSqliteDBTest
[junit] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0 sec
BUILD FAILED
在结果xml文件中,我得到了更多信息:
<error message="CreateStopwordSqliteDBTest (wrong name: de/mycompany/myproduct/CreateStopwordSqliteDBTest)" type="java.lang.NoClassDefFoundError">
java.lang.NoClassDefFoundError: CreateStopwordSqliteDBTest (wrong name: de/mycompany/myproduct/CreateStopwordSqliteDBTest)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:191)
</error>
NoClassDefFoundError
告诉我,类可以在编译时找到,但不能在运行时找到。请注意,受影响的类是实际的JUnit测试。即使我确定它是我的junit类路径的一部分,为什么不能找到它?
Fyi:当我从build.xml(我的junit类路径中的dirset
)中删除第131行 - 133行时,我会得到一个ClassNotFoundException
:
<error message="CreateStopwordSqliteDBTest" type="java.lang.ClassNotFoundException">
java.lang.ClassNotFoundException: CreateStopwordSqliteDBTest
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:191)
</error>
你能帮助我吗?
答案 0 :(得分:1)
源目录错误。以下是正确的属性:
<property name="src.dir" location="${basedir}/src" />
<property name="testsrc.dir" location="${basedir}/testsrc" />