maven多module項目中千萬不要引入其他模塊的單元測試代碼

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


這兩天一直在整理一些舊的代碼,將原來的混亂東西升級到maven管理。這其中也免不了將大項目拆分成若干個module來管理。然而爲了在測試的時候圖省事,在各個模塊都引用的基礎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 {

	@Test
	public abstract void doTest();
	
}

然後我希望其它module中的所有單元測試類都繼承自BaseTest,規範化代碼。然而,在執行測試時出現了NoClassDefFoundError: net/csdn/blog/chaijunkun/util/BaseTest。引入公共單元的src/main/java代碼都能正常加載。


經過參考一些Maven的資料得知,其工作機制實際上是包的依賴管理。在規定的標準目錄下,能夠在模塊之間引用的代碼只能存在於main目錄下。而單元測試(test目錄下的代碼)模型是建立在“獨立”的思想之上的,目的就是不受其他環境的干擾從而純粹地驗證自身模塊的可用性和正確性。因此單元測試代碼之間是不能被其他模塊引用的。

將其他模塊的單元測試代碼解除src/test/java級引用後,項目成功build。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章