使用SeleneseTestCase运行ANT会导致java.lang.NoClassDefFoundError

时间:2010-11-11 16:03:17

标签: java eclipse ant junit selenium

好的,所以当我尝试运行一个扩展 SeleneseTestCase 的类时,我想弄清楚为什么junit在我的ANT构建期间失败了。我可以手动运行测试而不会出现问题。只有当我尝试使用ANT构建和运行它时,我才会遇到这个问题。

我在Mac上使用最新版本的Eclipse:

selenium-java-client-driver-test.jar

selenium-java-client-driver.jar

selenium-server-standalone-2.0a7.jar 

这些在我的全局设置中在 ANT全局设置下引用,并在我的 SeleneseTestCase 类中正确导入(我可以手动运行testSuite.RegressionTest,没有任何问题,以及测试类本身)。所以我错过了ANT和Selenium之间的联系。

任何帮助或其他尝试都会受到欢迎。

如果你曾经在圣地亚哥(饮料在我身上!!!死得很严重:))

以下是我的控制台输出:

[junit] Testsuite: testSuite.RegressionTest
[junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec
[junit] Null Test:  Caused an ERROR
[junit] null
[junit] java.lang.reflect.InvocationTargetException
[junit] Caused by: java.lang.NoClassDefFoundError: com/thoughtworks/selenium/SeleneseTestCase
[junit]     at java.lang.ClassLoader.defineClass1(Native Method)
[junit]     at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
[junit]     at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
[junit]     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
[junit]     at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
[junit]     at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
[junit]     at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
[junit]     at java.security.AccessController.doPrivileged(Native Method)
[junit]     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
[junit]     at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
[junit]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
[junit]     at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
[junit]     at testSuite.RegressionTest.suite(Unknown Source)
[junit] Caused by: java.lang.ClassNotFoundException: com.thoughtworks.selenium.SeleneseTestCase
[junit]     at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
[junit]     at java.security.AccessController.doPrivileged(Native Method)
[junit]     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
[junit]     at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
[junit]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
[junit]     at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
[junit] Test testSuite.RegressionTest FAILED

更新:您可以看到已加载Selenium .jar文件...

[javac] [类文件的搜索路径:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsfd.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk /Contents/Classes/classes.jar,

... [删除不相称的加载类] ......

/Applications/eclipse/plugins/junit-4.8.2.jar,/Applications/eclipse/plugins/selenium-java-client-driver-tests.jar,/Applications/eclipse/plugins/硒 - Java的客户机 - driver.jar,/应用/日蚀/插件/硒 - 服务器 - 独立-2.0a7.jar

... [删除不相称的加载类] ......

1 个答案:

答案 0 :(得分:1)

它看起来不像是硒,而是让你头痛的蚂蚁。您使用的是什么版本的蚂蚁?

这听起来像是一个可以从ant生成的类路径问题。我浪费了很多时间试图弄清楚为什么我的构建工作只是为了发现在我的任务运行时有一些其他类路径变量被加载。当我明确地调用更新的版本时,我甚至不幸加载了旧版本的ant(深藏在Weblogic中)。那是我生命中浪费的4个小时......

我的建议是在你的ant脚本中创建一个classpath变量,明确命名你想要使用的jar,然后使用'-v'运行你的ant任务(为了详细),看看在运行时真正加载了什么。

俗话说'如​​果它闻起来像鸭子,像鸭子一样走路,像鸭子一样大便,那么你可能有一只鸭子'