您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > junit
Spring Test+JUnit整合使用
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2017/1/10 9:44:36 ] 推薦標(biāo)簽:單元測(cè)試 Junit

  在做spring相關(guān)測(cè)試時(shí)比較麻煩,如果只用JUnit測(cè)試,需要沒(méi)測(cè)有初始化一下applicationContext,效率比較底下,而且也有不足之處。具體見(jiàn)下文
  1. 導(dǎo)致多次Spring容器初始化問(wèn)題
  根據(jù)JUnit測(cè)試方法的調(diào)用流程,每執(zhí)行一個(gè)測(cè)試方法都會(huì)創(chuàng)建一個(gè)測(cè)試用例的實(shí)例并調(diào)用setUp()方法。由于一般情況下,我們?cè)趕etUp()方法 中初始化Spring容器,這意  味著如果測(cè)試用例有多少個(gè)測(cè)試方法,Spring容器會(huì)被重復(fù)初始化多次。雖然初始化Spring容器的速度并不會(huì)太 慢,但由于可能會(huì)在Spring容器初始化時(shí)執(zhí)行加載Hibernate  映射文件等耗時(shí)的操作,如果每執(zhí)行一個(gè)測(cè)試方法都必須重復(fù)初始化Spring容 器,則對(duì)測(cè)試性能的影響是不容忽視的;
  使用Spring測(cè)試套件,Spring容器只會(huì)初始化一次!
  2. 需要使用硬編碼方式手工獲取Bean
  在測(cè)試用例類中我們需要通過(guò)ctx.getBean()方法從Spirng容器中獲取需要測(cè)試的目標(biāo)Bean,并且還要進(jìn)行強(qiáng)制類型轉(zhuǎn)換的造型操作。這種乏味的操作迷漫在測(cè)試用例的  代碼中,讓人覺(jué)得煩瑣不堪;
  使用Spring測(cè)試套件,測(cè)試用例類中的屬性會(huì)被自動(dòng)填充Spring容器的對(duì)應(yīng)Bean,無(wú)須在手工設(shè)置Bean!
  3. 數(shù)據(jù)庫(kù)現(xiàn)場(chǎng)容易遭受破壞
  測(cè)試方法對(duì)數(shù)據(jù)庫(kù)的更改操作會(huì)持久化到數(shù)據(jù)庫(kù)中。雖然是針對(duì)開(kāi)發(fā)數(shù)據(jù)庫(kù)進(jìn)行操作,但如果數(shù)據(jù)操作的影響是持久的,可能會(huì)影響到后面的測(cè)試行為。舉個(gè)例子, 用戶在  測(cè)試方法中插入一條ID為1的User記錄,第一次運(yùn)行不會(huì)有問(wèn)題,第二次運(yùn)行時(shí),會(huì)因?yàn)橹麈I沖突而導(dǎo)致測(cè)試用例失敗。所以應(yīng)該既能夠完成功能邏 輯檢查,又能夠在測(cè)試  完成后恢復(fù)現(xiàn)場(chǎng),不會(huì)留下“后遺癥”;
  使用Spring測(cè)試套件,Spring會(huì)在你驗(yàn)證后,自動(dòng)回滾對(duì)數(shù)據(jù)庫(kù)的操作,保證數(shù)據(jù)庫(kù)的現(xiàn)場(chǎng)不被破壞,因此重復(fù)測(cè)試不會(huì)發(fā)生問(wèn)題!
  4. 不方便對(duì)數(shù)據(jù)操作正確性進(jìn)行檢查
  假如我們向登錄日志表插入了一條成功登錄日志,可是我們卻沒(méi)有對(duì)t_login_log表中是否確實(shí)添加了一條記錄進(jìn)行檢查。一般情況下,我們可能是打開(kāi) 數(shù)據(jù)庫(kù),肉眼觀察  是否插入了相應(yīng)的記錄,但這嚴(yán)重違背了自動(dòng)測(cè)試的原則。試想在測(cè)試包括成千上萬(wàn)個(gè)數(shù)據(jù)操作行為的程序時(shí),如何用肉眼進(jìn)行檢查?
  只要你繼承Spring的測(cè)試套件的用例類,你可以通過(guò)jdbcTemplate在同一事務(wù)中訪問(wèn)數(shù)據(jù)庫(kù),查詢數(shù)據(jù)的變化,驗(yàn)證操作的正確性!
  下面筆者給大家介紹具體實(shí)現(xiàn)過(guò)程(基于maven項(xiàng)目):
  在maven的pom.xml中加入以下配置,其他spring相關(guān)配置省略。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
  定義一個(gè)測(cè)試基類:
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)//表示整合JUnit4進(jìn)行測(cè)試
@ContextConfiguration(locations={"classpath:spring-config.xml"})//加載spring配置文件
public class BaseJunit4Test {
}
  編寫具體的測(cè)試類,繼承剛剛的測(cè)試基類:
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import com.gk.spring.redis.daoImpl.UserDao;
import com.gk.spring.redis.entity.User;
public class SpringRedisTest extends BaseJunit4Test {
@Autowired
private UserDao userDao;
@Test
public void test01() {
User user = new User();
user.setId("1");
user.setName("qq");
userDao.add(user);
User user2 = userDao.get("1");
System.out.println(user2.getName());
}
}
  后,按照自己的測(cè)試要求進(jìn)行測(cè)試即可。

軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd