最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Junit 測試之 Spring Test

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

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

1、導(dǎo)致多次Spring容器初始化問題

根據(jù)JUnit測試方法的調(diào)用流程,每執(zhí)行一個(gè)測試方法都會創(chuàng)建一個(gè)測試用例的實(shí)例并調(diào)用setUp()方法。由于一般情況下,我們在setUp()方法 中初始化Spring容器,這意味著如果測試用例有多少個(gè)測試方法,Spring容器就會被重復(fù)初始化多次。雖然初始化Spring容器的速度并不會太 慢,但由于可能會在Spring容器初始化時(shí)執(zhí)行加載Hibernate映射文件等耗時(shí)的操作,如果每執(zhí)行一個(gè)測試方法都必須重復(fù)初始化Spring容 器,則對測試性能的影響是不容忽視的;使用Spring測試套件,Spring容器只會初始化一次!

2、需要使用硬編碼方式手工獲取Bean

在測試用例類中我們需要通過ctx.getBean()方法從Spirng容器中獲取需要測試的目標(biāo)Bean,并且還要進(jìn)行強(qiáng)制類型轉(zhuǎn)換的造型操作。這種乏味的操作迷漫在測試用例的代碼中,讓人覺得煩瑣不堪;使用Spring測試套件,測試用例類中的屬性會被自動填充Spring容器的對應(yīng)Bean,無須在手工設(shè)置Bean!

3、數(shù)據(jù)庫現(xiàn)場容易遭受破壞

測試方法對數(shù)據(jù)庫的更改操作會持久化到數(shù)據(jù)庫中。雖然是針對開發(fā)數(shù)據(jù)庫進(jìn)行操作,但如果數(shù)據(jù)操作的影響是持久的,可能會影響到后面的測試行為。舉個(gè)例子, 用戶在測試方法中插入一條ID為1的User記錄,第一次運(yùn)行不會有問題,第二次運(yùn)行時(shí),就會因?yàn)橹麈I沖突而導(dǎo)致測試用例失敗。所以應(yīng)該既能夠完成功能邏 輯檢查,又能夠在測試完成后恢復(fù)現(xiàn)場,不會留下“后遺癥”;使用Spring測試套件,Spring會在你驗(yàn)證后,自動回滾對數(shù)據(jù)庫的操作,保證數(shù)據(jù)庫的現(xiàn)場不被破壞,因此重復(fù)測試不會發(fā)生問題!

4、不方便對數(shù)據(jù)操作正確性進(jìn)行檢查

假如我們向登錄日志表插入了一條成功登錄日志,可是我們卻沒有對t_login_log表中是否確實(shí)添加了一條記錄進(jìn)行檢查。一般情況下,我們可能是打開 數(shù)據(jù)庫,肉眼觀察  是否插入了相應(yīng)的記錄,但這嚴(yán)重違背了自動測試的原則。試想在測試包括成千上萬個(gè)數(shù)據(jù)操作行為的程序時(shí),如何用肉眼進(jìn)行檢查?
只要你繼承Spring的測試套件的用例類,你就可以通過jdbcTemplate在同一事務(wù)中訪問數(shù)據(jù)庫,查詢數(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基類

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

所有的測試類,都繼承該類即可。

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

3.測試類

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 //自動注入 
  private UserManagerService userManagerService; 
   
  @Test 
  @Transactional  //標(biāo)明此方法需使用事務(wù)  
  @Rollback(false) //標(biāo)明使用完此方法后事務(wù)不回滾,true時(shí)為回滾  
  public void testUser(){ 
    System.out.println("測試Spring整合Junit4進(jìn)行單元測試"); 
     
    AdeUser user = userManagerService.get("0");
    System.out.println(user);
    System.out.println("------------"+user.getLoginName());
  }
} 
  1. 使用Spring Test 可以使用@Autowired 自動注入 相關(guān)的bean信息,而不需要自己手動通過getBean去獲取相應(yīng)的bean信息。
  2. @Transaction
  3. 使用Spring Test 測試,可以 @Transaction 注解,表示該方法使用spring的事務(wù)。
  4. @Rollback(false)

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

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

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

相關(guān)文章

  • Java算法實(shí)現(xiàn)調(diào)整數(shù)組順序使奇數(shù)位于偶數(shù)之前的講解

    Java算法實(shí)現(xiàn)調(diào)整數(shù)組順序使奇數(shù)位于偶數(shù)之前的講解

    今天小編就為大家分享一篇關(guān)于Java算法實(shí)現(xiàn)調(diào)整數(shù)組順序使奇數(shù)位于偶數(shù)之前的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java設(shè)計(jì)模式之橋接模式詳解

    Java設(shè)計(jì)模式之橋接模式詳解

    橋接模式(Bridge Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式,用于將抽象部分和實(shí)現(xiàn)部分`分離開來,從而使它們可以獨(dú)立地進(jìn)行變化,本節(jié)給大家講一下設(shè)計(jì)模式中的橋接模式,并結(jié)合實(shí)際業(yè)務(wù)場景給大家講解如何使用,需要的朋友可以參考下
    2023-07-07
  • Windows下如何安裝配置Redis環(huán)境

    Windows下如何安裝配置Redis環(huán)境

    這篇文章主要介紹了Windows下如何安裝配置Redis環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 深入淺出講解Spring框架中AOP及動態(tài)代理的應(yīng)用

    深入淺出講解Spring框架中AOP及動態(tài)代理的應(yīng)用

    在軟件業(yè),AOP為Aspect?Oriented?Programming的縮寫,意為:面向切面編程,通過預(yù)編譯方式和運(yùn)行期間動態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)
    2022-03-03
  • Dubbo Service Mesh基礎(chǔ)架構(gòu)組件改造

    Dubbo Service Mesh基礎(chǔ)架構(gòu)組件改造

    Service Mesh這個(gè)“熱”詞是2016年9月被“造”出來,而今年2018年更是被稱為service Mesh的關(guān)鍵之年,各家大公司都希望能在這個(gè)思潮下領(lǐng)先一步
    2023-03-03
  • SpringBoot集成阿里巴巴Druid監(jiān)控的示例代碼

    SpringBoot集成阿里巴巴Druid監(jiān)控的示例代碼

    這篇文章主要介紹了SpringBoot集成阿里巴巴Druid監(jiān)控的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04
  • Java如何將Excel數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫

    Java如何將Excel數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫

    這篇文章主要為大家詳細(xì)介紹了Java將Excel數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 淺談web服務(wù)器項(xiàng)目中request請求和response的相關(guān)響應(yīng)處理

    淺談web服務(wù)器項(xiàng)目中request請求和response的相關(guān)響應(yīng)處理

    這篇文章主要介紹了淺談web服務(wù)器項(xiàng)目中request請求和response的相關(guān)響應(yīng)處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java對稱加密算法DES實(shí)例詳解

    Java對稱加密算法DES實(shí)例詳解

    這篇文章主要介紹了Java對稱加密算法DES,結(jié)合實(shí)例形式詳細(xì)分析了java DES算法的概念、原理、實(shí)現(xiàn)方法與應(yīng)用場景,需要的朋友可以參考下
    2019-09-09
  • 淺析Java如何在并發(fā)環(huán)境下生成一個(gè)只讀的map

    淺析Java如何在并發(fā)環(huán)境下生成一個(gè)只讀的map

    這篇文章主要為大家詳細(xì)介紹了Java如何在并發(fā)環(huán)境下生成一個(gè)只讀的map,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04

最新評論

蛟河市| 朝阳市| 高州市| 阳江市| 喀喇| 腾冲县| 麻栗坡县| 诸城市| 墨江| 昌黎县| 太仆寺旗| 论坛| 临潭县| 同仁县| 蓝山县| 确山县| 大关县| 余江县| 铜川市| 肇东市| 宣恩县| 托克逊县| 林甸县| 共和县| 青川县| 鄂伦春自治旗| 红桥区| 铜鼓县| 临邑县| 阿勒泰市| 宣化县| 桐城市| 军事| 日喀则市| 临潭县| 剑川县| 西峡县| 凤冈县| 海口市| 伊宁市| 肇州县|