2016-04-03 32 views
5

我的項目中有一個JUnit測試類,它是逐步更新的 - 我每隔幾周添加一次測試,有時修改測試代碼。令人驚訝的是,當我使用eclipse JUnit Runner 4運行測試類時,它運行我的舊代碼(更新之前)而不是新代碼。我可以更改代碼,添加或刪除測試,但它仍然運行舊代碼。單元測試類在eclipse中運行舊版本

我試圖找出問題並運行我剛剛編寫的單個測試,並且在沒有任何堆棧跟蹤的情況下得到臭名昭着的「Unrooted tests」錯誤,以便讓我知道問題所在。

JUnit runner response. test7() is indeed within the compiled test class

我做了一些研究,並根據這裏的幾個其他線程,很多人都遇到過這個問題,關於JUnit的3 \ JUnit 4中的兼容性,但在這裏,這是不是這樣的 - 我標註了所有的考試與@Test,我不擴展TestCase類。

清理/建立所有的eclipse項目並沒有幫助。 但是,這個問題在我乾淨安裝我的項目時會自行工作,但這需要太多時間。 此外,重命名類(在eclipse中的Alt + Shift + R)獲取新代碼立即運行,但將其重命名回其原始(和有效)名稱,獲取舊代碼再次運行(WTF?)

幫助,將不勝感激, 10x

+1

如果它運行的是舊代碼,它**有**舊代碼,無論是在源代碼或編譯。你是否有舊的代碼,甚至可能是在正好在類路徑中的.jar中? – Harald

+0

我想我在某個地方,但假設eclipse已經編譯它(它做了),是不是日食亞軍應該運行它被指示運行的代碼? – KidCrippler

+2

是否有可能以Eclipse的配置方式讓測試運行器使用'target'下的編譯類,但Eclipse編譯器正在輸出到不同的文件夾(默認情況下是'bin')?這可以解釋爲什麼Maven構建解決了這個問題。 – sisyphus

回答

0

我設法解決我自己的問題(靈感來自Harlard貢獻的評論)。 在檢查了我的項目的目標目錄後,我注意到其中的測試類目錄不包含我的測試的二進制文件。 然後我注意到我錯誤放置了src/test/java中的類,並將它們放入與我的項目的包結構不一致的包結構中,它們是src/test/java的直接子目錄。 因此,eclipse沒有把它們放在正確的位置,並且爲它們生成二進制文件的唯一方法是通過執行maven構建。 將所有我的測試類重構爲正確的包結構後,所有工作都完美無缺。

+0

謝謝。我必須在我的'.classpath'文件中明確指定'output'目錄才能使其工作:''。在此之前,我沒有'output'部分,因此在'target'目錄下編譯了版本,但沒有在Eclipse中執行Junit執行的正確位置。 –

0

另一種解決方案是手動刪除項目的「目標」文件夾並重建它。這應該解決所有這類問題。