欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Junit 測(cè)試之 Spring Test

 更新時(shí)間:2017年10月21日 10:50:45   作者:jijs  
本篇文章主要介紹了Junit 測(cè)試之 Spring Test,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

在做spring相關(guān)測(cè)試時(shí)比較麻煩,如果只用JUnit測(cè)試,需要沒(méi)測(cè)有初始化一下applicationContext,效率比較底下,而且也有不足之處。

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è)試用例類(lèi)中我們需要通過(guò)ctx.getBean()方法從Spirng容器中獲取需要測(cè)試的目標(biāo)Bean,并且還要進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換的造型操作。這種乏味的操作迷漫在測(cè)試用例的代碼中,讓人覺(jué)得煩瑣不堪;使用Spring測(cè)試套件,測(cè)試用例類(lèi)中的屬性會(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è)試套件的用例類(lèi),你就可以通過(guò)jdbcTemplate在同一事務(wù)中訪問(wèn)數(shù)據(jù)庫(kù),查詢數(shù)據(jù)的變化,驗(yàn)證操作的正確性!

1. maven 配置

<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.3.12</version>
  <scope>test</scope>
</dependency>

2.創(chuàng)建BaseJunit4Test基類(lèi)

創(chuàng)建 Spring Test 的基類(lèi),該類(lèi)主要用來(lái)加載配置文件,設(shè)置web環(huán)境。

所有的測(cè)試類(lèi),都繼承該類(lèi)即可。

import org.junit.runner.RunWith; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration; 
 
@RunWith(SpringJUnit4ClassRunner.class) //使用junit4進(jìn)行測(cè)試 
@ContextConfiguration(locations={"classpath:spring.xml","classpath:spring-mvc.xml","classpath:spring-hibernate.xml","classpath:spring-ehcache.xml"}) //加載配置文件
@WebAppConfiguration("src/main/webapp")
//------------如果加入以下代碼,所有繼承該類(lèi)的測(cè)試類(lèi)都會(huì)遵循該配置,也可以不加,在測(cè)試類(lèi)的方法上///控制事務(wù),參見(jiàn)下一個(gè)實(shí)例  
//這個(gè)非常關(guān)鍵,如果不加入這個(gè)注解配置,事務(wù)控制就會(huì)完全失效!  
//@Transactional  
//這里的事務(wù)關(guān)聯(lián)到配置文件中的事務(wù)控制器(transactionManager = "transactionManager"),同時(shí)//指定自動(dòng)回滾(defaultRollback = true)。這樣做操作的數(shù)據(jù)才不會(huì)污染數(shù)據(jù)庫(kù)!  
//@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)  
//------------  
public class BaseJunit4Test{ 
   
}
  1. @RunWith(SpringJUnit4ClassRunner.class) 使用junit4進(jìn)行測(cè)試
  2. @ContextConfiguration() 加載spring相關(guān)的配置文件
  3. @WebAppConfiguration() 設(shè)置web項(xiàng)目的環(huán)境,如果是Web項(xiàng)目,必須配置該屬性,否則無(wú)法獲取 web 容器相關(guān)的信息(request、context 等信息)

3.測(cè)試類(lèi)

import org.junit.Test; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.test.annotation.Rollback; 
import org.springframework.transaction.annotation.Transactional; 
 
import cn.com.infcn.ade.service.UserManagerService;
import cn.com.infcn.model.pmodel.AdeUser; 
 
public class UserTest extends BaseJunit4Test{ 
  @Autowired //自動(dòng)注入 
  private UserManagerService userManagerService; 
   
  @Test 
  @Transactional  //標(biāo)明此方法需使用事務(wù)  
  @Rollback(false) //標(biāo)明使用完此方法后事務(wù)不回滾,true時(shí)為回滾  
  public void testUser(){ 
    System.out.println("測(cè)試Spring整合Junit4進(jìn)行單元測(cè)試"); 
     
    AdeUser user = userManagerService.get("0");
    System.out.println(user);
    System.out.println("------------"+user.getLoginName());
  }
} 
  1. 使用Spring Test 可以使用@Autowired 自動(dòng)注入 相關(guān)的bean信息,而不需要自己手動(dòng)通過(guò)getBean去獲取相應(yīng)的bean信息。
  2. @Transaction
  3. 使用Spring Test 測(cè)試,可以 @Transaction 注解,表示該方法使用spring的事務(wù)。
  4. @Rollback(false)

標(biāo)明使用完此方法后事務(wù)不回滾,true時(shí)為回滾。

比如每次打包或提交時(shí),都執(zhí)行下所有的測(cè)試類(lèi),而測(cè)試類(lèi)每次都進(jìn)行插入或刪除數(shù)據(jù)或?qū)е聰?shù)據(jù)庫(kù)中的數(shù)據(jù)不完整,為了防止執(zhí)行測(cè)試類(lèi)都修改庫(kù)中的數(shù)據(jù),可以設(shè)置Rollback(true)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot項(xiàng)目 文件上傳臨時(shí)目標(biāo)被刪除異常的處理方案

    SpringBoot項(xiàng)目 文件上傳臨時(shí)目標(biāo)被刪除異常的處理方案

    這篇文章主要介紹了SpringBoot項(xiàng)目 文件上傳臨時(shí)目標(biāo)被刪除異常的處理方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • spring整合Quartz框架過(guò)程詳解

    spring整合Quartz框架過(guò)程詳解

    這篇文章主要介紹了spring整合Quartz框架過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java8中常見(jiàn)函數(shù)式接口的使用示例詳解

    Java8中常見(jiàn)函數(shù)式接口的使用示例詳解

    在 Java 8 中,函數(shù)式接口是一個(gè)關(guān)鍵的特性,它們?cè)试S將方法作為參數(shù)傳遞或返回類(lèi)型,本文為大家整理了一些常見(jiàn)的函數(shù)式接口的使用,希望對(duì)大家有所幫助
    2023-12-12
  • Java正則表達(dá)式API邊界匹配

    Java正則表達(dá)式API邊界匹配

    這篇文章主要介紹了Java正則表達(dá)式API邊界匹配,文章圍繞主題展開(kāi)相應(yīng)的相關(guān)資料,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-06-06
  • 關(guān)于Spring中一級(jí)緩存、二級(jí)緩存和三級(jí)緩存的那些事

    關(guān)于Spring中一級(jí)緩存、二級(jí)緩存和三級(jí)緩存的那些事

    Spring解決循環(huán)依賴的核心思想在于提前曝,下面這篇文章主要給大家介紹了關(guān)于Spring中一級(jí)緩存、二級(jí)緩存和三級(jí)緩存的那些事,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • Java深入講解Bean作用域與生命周期

    Java深入講解Bean作用域與生命周期

    這篇文章主要介紹了淺談Spring中Bean的作用域和生命周期,從創(chuàng)建到消亡的完整過(guò)程,例如人從出生到死亡的整個(gè)過(guò)程就是一個(gè)生命周期。本文將通過(guò)示例為大家詳細(xì)講講,感興趣的可以學(xué)習(xí)一下
    2022-06-06
  • OpenFeign實(shí)現(xiàn)微服務(wù)間的文件下載方式

    OpenFeign實(shí)現(xiàn)微服務(wù)間的文件下載方式

    這篇文章主要介紹了OpenFeign實(shí)現(xiàn)微服務(wù)間的文件下載方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Mybatis中攔截器的簡(jiǎn)單實(shí)現(xiàn)方法

    Mybatis中攔截器的簡(jiǎn)單實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于Mybatis中攔截器的簡(jiǎn)單實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Mybatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • SpringBoot2.1.x,創(chuàng)建自己的spring-boot-starter自動(dòng)配置模塊操作

    SpringBoot2.1.x,創(chuàng)建自己的spring-boot-starter自動(dòng)配置模塊操作

    這篇文章主要介紹了SpringBoot2.1.x,創(chuàng)建自己的spring-boot-starter自動(dòng)配置模塊操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • 基于eclipse.ini內(nèi)存設(shè)置的問(wèn)題詳解

    基于eclipse.ini內(nèi)存設(shè)置的問(wèn)題詳解

    本篇文章是對(duì)eclipse.ini內(nèi)存設(shè)置的問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評(píng)論