SSM框架中測(cè)試單元的使用 spring整合Junit過(guò)程詳解
測(cè)試類中的問(wèn)題和解決思路
問(wèn)題
在測(cè)試類中,每個(gè)測(cè)試方法都有以下兩行代碼:
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
IAccountService as = ac.getBean("accountService",IAccountService.class);
這兩行代碼的作用是獲取容器,如果不寫(xiě)的話,直接會(huì)提示空指針異常。所以又不能輕易刪掉。
解決思路分析
針對(duì)上述問(wèn)題,我們需要的是程序能自動(dòng)幫我們創(chuàng)建容器。一旦程序能自動(dòng)為我們創(chuàng)建 spring 容器,我們就無(wú)須手動(dòng)創(chuàng)建了,問(wèn)題也就解決了。
我們都知道,junit 單元測(cè)試的原理(在 web 階段課程中講過(guò)),但顯然,junit 是無(wú)法實(shí)現(xiàn)的,因?yàn)樗约憾紵o(wú)法知曉我們是否使用了 spring 框架,更不用說(shuō)幫我們創(chuàng)建 spring 容器了。不過(guò)好在,junit 給我們暴露了一個(gè)注解,可以讓我們替換掉它的運(yùn)行器。
這時(shí),我們需要依靠 spring 框架,因?yàn)樗峁┝艘粋€(gè)運(yùn)行器,可以讀取配置文件(或注解)來(lái)創(chuàng)建容器。我們只需要告訴它配置文件在哪就行了。
配置步驟
第一步:拷貝整合 junit的必備 jar包到 lib目錄
此處需要注意的是,導(dǎo)入 jar 包時(shí),需要導(dǎo)入一個(gè) spring 中 aop 的 jar 包。
第二步:使用@RunWith注解替換原有運(yùn)行器
/**
* 測(cè)試類
* @Version 1.0
*/ @RunWith(SpringJUnit4ClassRunner.class) public class AccountServiceTest {
}
第三步:使用@ContextConfiguration指定 spring配置文件的位置
/**
*/ @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= {"classpath:bean.xml"})
public class AccountServiceTest {
}
@ContextConfiguration 注解:
locations 屬性:用于指定配置文件的位置。如果是類路徑下,需要用 classpath:表明classes 屬性:用于指定注解的類。當(dāng)不使用 xml 配置時(shí),需要用此屬性指定注解類的位置。
第四步:使用@Autowired給測(cè)試類中的變量注入數(shù)據(jù)
/**
*/ @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= {"classpath:bean.xml"})
public class AccountServiceTest {
@Autowired
private IAccountService as ;
}
為什么不把測(cè)試類配到 xml中
在解釋這個(gè)問(wèn)題之前,先解除大家的疑慮,配到 XML 中能不能用呢? 答案是肯定的,沒(méi)問(wèn)題,可以使用。
那么為什么不采用配置到 xml 中的方式呢? 這個(gè)原因是這樣的:
第一:當(dāng)我們?cè)?xml 中配置了一個(gè) bean,spring 加載配置文件創(chuàng)建容器時(shí),就會(huì)創(chuàng)建對(duì)象。
第二:測(cè)試類只是我們?cè)跍y(cè)試功能時(shí)使用,而在項(xiàng)目中它并不參與程序邏輯,也不會(huì)解決需求上的問(wèn)題,所以創(chuàng)建完了,并沒(méi)有使用。那么存在容器中就會(huì)造成資源的浪費(fèi)。
所以,基于以上兩點(diǎn),我們不應(yīng)該把測(cè)試配置到 xml 文件中。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
MyBatis映射文件resultMap元素中使用多個(gè)association的方法
這篇文章主要介紹了MyBatis映射文件resultMap元素中使用多個(gè)association的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
SpringBoot整合Mysql和Redis的詳細(xì)過(guò)程
這篇文章主要介紹了SpringBoot整合Mysql和Redis的示例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
Java中synchronized關(guān)鍵字修飾方法同步的用法詳解
synchronized可以用來(lái)同步靜態(tài)和非靜態(tài)方法,下面就具體來(lái)看一下Java中synchronized關(guān)鍵字修飾方法同步的用法詳解:2016-06-06

