2016-10-03 137 views
1

我有一個項目有3個測試類 - TextModelTest,LocalClassificationTaskTest,ModelFetcherTest。 單獨運行時,它們中的每一個都會通過,但是一次運行(來自Eclipse)時,第三個(ModelFetcherTest)的所有測試都會失敗,並顯示NullPointerException。令人驚訝的是,日食甚至不會停留在我放入測試類的斷點處(ModelFetcher)。JMockit @Mocked annotation導致其他測試失敗

做一些研究(試圖忽略每一個成功的測試,以找出哪一個導致第三類失敗)後,我注意到,在第二個測試類(LocalClassificationTaskTest)具有ModelFetcher類型的嘲笑場,這是第三測試類的CUT:

@Mocked ModelFetcher modelFetcher; 

ModelFetcherTest

@Tested ModelFetcher modelFetcher; 

我除去@Mocked註釋並用代替它的邏輯0(這是更麻煩和冗長,但無論如何),現在一切正常。

請注意,問題僅在eclipse中發生。所有測試通過maven運行時傳遞。 沒有種族問題,所有的測試通過和失敗一致(不涉及運氣)。

@Mocked註解是否會影響同一個項目中的其他測試用例?

+0

您應該顯示[這三個測試類的最小版本,當它以「正確」順序執行時會重現失敗](http://stackoverflow.com/help/mcve)。否則,沒有辦法提供實際的答案。 –

回答

0

@Mocked註釋在一個類中可能會影響另一個類的唯一方法是如果jvm過程在類之間共享。通常情況下,每個測試類應該分離一個獨立的jvm進程,從而將模擬分離到各自的測試類。這聽起來像你的測試套件一起運行所有的測試運行一個jvm。我不使用Eclipse,但this thread似乎表明這對於Eclipse中的其他人來說是個問題。不過,您也許可以在Eclipse中更改構建腳本以分離獨立的jvm。

+0

10倍,我檢查了線程,並沒有明確的解決方案從Eclipse內部分叉JVM。一些更多的研究表明,沒有指定的插件就無法完成。我會檢查並更新。 – KidCrippler

+0

對於上下文,gradle的默認行爲是在單個jvm中運行所有測試https://discuss.gradle.org/t/tests-should-use-one-jvm-per-test-class-not-per-項目/ 12774 – Novaterata

相關問題