標籤:maven 測試 module 多模組 noclassdeffounderror
本文出處:http://blog.csdn.net/chaijunkun/article/details/35796335,轉載請註明。由於本人不定期會整理相關博文,會對相應內容作出完善。因此強烈建議在原始出處查看此文。
這兩天一直在整理一些舊的代碼,將原來的混亂東西升級到maven管理。這其中也免不了將大項目拆分成若干個module(這裡糾正一個發音,不是“貓丟”,是[‘mɑ?d?ul],包闊我在內很多人都念錯)來管理。然而為了在測試的時候圖省事,在各個模組都引用的基礎module中src/test/java中建立了一個BaseTest,
package net.csdn.blog.chaijunkun.util;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations="classpath:applicationContext*.xml")public abstract class BaseTest {@Testpublic abstract void doTest();}
然後其它module中的所有單元測試類都繼承自BaseTest。免去了寫上述註解的麻煩。然而,在執行測試時出現了NoClassDefFoundError: net/csdn/blog/chaijunkun/util/BaseTest。奇怪的是引入公用單元的src/main/java代碼都能正常載入。
後來經過參考無數的資料後來想通了,maven單元測試模型是建立在“獨立”的思想之上的,目的就是不受其他環境的幹擾從而純粹地驗證自身模組的可用性和正確性。因此測試層級的代碼之間是不能被其他模組引用的。
將其他模組的單元測試代碼解除src/test/java級引用後,項目成功build。