2010-11-11 95 views
1

好的,所以我想弄清楚爲什麼junit在我的ANT編譯期間失敗,當我嘗試運行一個擴展了SeleneseTestCase的類時。我可以在沒有問題的情況下手動運行測試。只有當我嘗試使用ANT進行構建和運行時,我纔會遇到這個問題。使用SeleneseTestCase運行ANT會導致java.lang.NoClassDefFoundError

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

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, /系統/圖書館/的Java/JavaVirtualMachines/1.6.0.jdk /內容/班/ classes.jar,

...... [REMOVED IRRELEVANT加載的類] ...

/Applications/eclipse/plugins/junit-4.8 .2.jar,/應用/日蝕/插件/硒 - Java的客戶機驅動器-tests.jar,/應用/日蝕/插件/硒 - Java的客戶機 - driver.jar,/應用/日蝕/插件/硒服務器獨立-2.0a7.jar]

...... [REMOVED IRRELEVANT加載的類] ...

+0

有運行ANT與冗長/調試,你會看到它真正加載了什麼CLASSPATH。 – 2010-11-11 16:26:19

+0

@ karianna我更新了它加載路徑到類的部分的問題。從這個輸出中,我假設與硒相關的.jar文件正在正確加載。 – 2010-11-11 17:00:58

回答

1

它看起來不像是硒,而是讓你頭痛的螞蟻。你使用的是什麼版本的螞蟻?

這絕對聽起來像一個可以從螞蟻生成的類路徑問題。我花了很多時間試圖弄清楚爲什麼我的構建不能僅僅發現在我的任務運行時有一些其他classpath變量被加載。當我明確調用更新的版本時,我甚至不幸加載了一個老版本的ant(隱藏在Weblogic中)。那是我一生中浪費的4個小時......

我的建議是在你的ant腳本中創建一個類路徑變量,明確指定要使用的罐子,並用'-v'運行你的ant任務(for verbose )來查看運行時真正加載的內容。

俗話說',如果它聞起來像鴨子,走起來像鴨子,並poops像鴨子,那麼你可能已經得到鴨蛋

+0

我發現我的問題在重新啓動我的Mac後自行解決。我猜Eclipse的一些東西(和內置的ANT v1.7.0.v200803061910)沒有識別我添加的類路徑和JAR,直到重新啓動。我認爲這是一個類路徑問題,但重新啓動! – 2010-11-17 17:54:57

相關問題