1. 程式人生 > >eclipse+maven+junit單元測試問題總結

eclipse+maven+junit單元測試問題總結

(一)建立工程

1.1建立步驟很簡單,網上也有很多說明,在此就不贅述,只說明一點:

如果建立的是應用程式,則選擇第1個,如果建立的是web工程,則選擇第2個;

1.2建立完工程之後,工程結構如下:

如果src/main/java,src/main/resources,src/test/java,src/test/resources這幾個目錄缺少,手動新增即可;

(二)單元測試引發的問題

測試框架:spring-test+junit,單元測試類如下

package com.jimmy.test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.jimmy.testSpring.StudentDao;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext-test.xml"})
public class StudentDaoTest extends AbstractJUnit4SpringContextTests {

 	@Autowired private StudentDao studentDao; 	
 	@Autowired private ApplicationContext ctx;
	
	@Test
	public void test(){
		studentDao.testAutowired();
	}
	
	@Test
	public void test1(){		
		StudentDao dao = ctx.getBean(StudentDao.class);
		dao.testAutowired();
	}
}

測試所用配置檔案路徑:

2.1、一切看起來沒有任何問題,但是當我執行JUnit測試時,報錯:找不到applicationContext-test.xml檔案,這就很納悶了,於是我檢視檔案系統,發現配置檔案都沒有載入到test-classes目錄下:


解決方法:選中專案-->右鍵選擇“properties”-->"java build path",如下圖所示:


原來在這裡/src/test/resources目錄下的檔案輸出到了default output folder,而default output folder定義為MavenTest/target/classes,所以測試配置檔案沒有載入到test-classes目錄下,程式自然報錯找不到檔案了。

注意:3標示處有的時候excluded的值是*,這表示將所有檔案排除了,所以要修改為(None)。

接下來選中上圖1標示處,再點選2處“edit”,如下圖所示


選中紅框標示處,再配置路徑,這樣測試配置檔案就能載入到/target/test-classes目錄下了。

2.2、我再次執行junit測試,結果還是報錯:NoClassDefFoundError: org/junit/runners/model/MultipleFailureException出現這個問題的原因時junit版本過低,於是我將junit版本換成4.12的,再次執行成功。

(三)啟動工程日誌輸出路徑出錯引發的思考

該工程日誌配置檔案路徑


第一個是工程正式使用的,第二個是測試時使用的,啟動工程後執行發現日誌打在了log-test.log上,而log.log沒有日誌內容,找了半天沒有找到原因,我就在釋出路徑下瞧了瞧,發現了問題所在:


/src/test/resources目錄下的配置檔案也部署到了WEB-INF\classes目錄下,

解決方法:選中專案-->右鍵選擇“properties”-->deployment assembly ”,

選中紅框的兩項點選右邊的“remove”即可。

還是要自己多動手呀,書上看到的表面上是掌握了,但是實際操作會遇到各種小問題,自己動手了才能發現問題,解決了問題自己也進步了。