1. 程式人生 > >maven多module專案中千萬不要引入其他模組的單元測試程式碼

maven多module專案中千萬不要引入其他模組的單元測試程式碼

本文出處:http://blog.csdn.net/chaijunkun/article/details/35796335,轉載請註明。由於本人不定期會整理相關博文,會對相應內容作出完善。因此強烈建議在原始出處檢視此文。

這兩天一直在整理一些舊的程式碼,將原來的混亂東西升級到maven管理。這其中也免不了將大專案拆分成若干個module(這裡糾正一個發音,不是“貓丟”,是['mɑːdʒul],包闊我在內很多人都念錯)來管理。然而為了在測試的時候圖省事,在各個模組都引用的基礎module中src/test/java中建立了一個BaseTest,

  1. package net.csdn.blog.chaijunkun.util;  
  2. import org.junit.Test;  
  3. import org.junit.runner.RunWith;  
  4. import org.springframework.test.context.ContextConfiguration;  
  5. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  
  6. @RunWith(SpringJUnit4ClassRunner.class)  
  7. @ContextConfiguration(locations="classpath:applicationContext*.xml"
    )  
  8. publicabstractclass BaseTest {  
  9.     @Test
  10.     publicabstractvoid doTest();  
  11. }  

然後其它module中的所有單元測試類都繼承自BaseTest。免去了寫上述註解的麻煩。然而,在執行測試時出現了NoClassDefFoundError: net/csdn/blog/chaijunkun/util/BaseTest。奇怪的是引入公共單元的src/main/java程式碼都能正常載入。

後來經過參考無數的資料後來想通了,maven單元測試模型是建立在“獨立”的思想之上的,目的就是不受其他環境的干擾從而純粹地驗證自身模組的可用性和正確性。因此測試級別的程式碼之間是不能被其他模組引用的。

將其他模組的單元測試程式碼解除src/test/java級引用後,專案成功build。