java ssh 框架下 利用junit4 spring-test進行單元測試
ssh框架下 由於bean實列 都交給spring 管理,要做單元測試就比較苦難,junit4 引入註解方便很多;
1. 加入依賴包
使用Spring的測試框架需要加入以下依賴包:
- Spring Test (Spring框架中的test包)
- Spring 相關其他依賴包(不再贅述了,就是context等包)
2. 建立測試源目錄和包
在此,推薦建立一個和src平級的原始檔目錄,因為src內的類都是為日後產品準備的,而此處的類僅僅用於測試。而包的名稱可以和src中的目錄同名,這樣由於在test源目錄(source file),所以不會有衝突,而且名稱又一模一樣,更方便檢索。
3. 建立測試類
建立一個測試用的類,推薦名稱為 “被測試類名稱 + Test”。
測試類應該繼承與 AbstractJUnit4SpringContextTests 或 AbstractTransactionalJUnit4SpringContextTests
對於 AbstractJUnit4springcontextTests 和 AbstractTransactionalJUnit4SpringContextTests 類的選擇:
如果再你的測試類中,需要用到事務管理(比如要在測試結果出來之後回滾測試內容),就可以使用AbstractTransactionalJUnit4SpringTests類
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
如果沒有新增上述bean,將會丟擲NoSuchBeanDefinitionException,指明
No bean named 'transactionManager' is definded.
4. 配置測試類
新增如下內容在class前,用於配置applicationContext.xml檔案的位置。
@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations={"classpath:/config/applicationContext-*.xml","classpath:/config/applicationContext-beans-*.xml","classpath:/config/applicationContext-beans.xml"})
5. 建立測試方法
建立測試用方法,推薦名稱為 “被測方法名稱+ Test”。
測試方法上方加入 @Test
6. 通過JUnit 4 執行
右鍵方法名,選擇則“Run As”→“JUnit Test”即可
package com.zjpost.bank.service;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:/config/applicationContext-*.xml","classpath:/config/applicationContext-beans-*.xml","classpath:/config/applicationContext-beans.xml"})
public class MBankDetailIcbcServiceImplTest extends
AbstractJUnit4SpringContextTests {
@Resource
private MBankDetailIcbcServiceImpl mBankDetailIcbcService;
@Test
public void getBankData(){
mBankDetailIcbcService.getBankData();
}
}
@Resource 可以指定name 或者tpye