激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 詳解Junit 測試之 Spring Test

詳解Junit 測試之 Spring Test

2021-01-23 12:35jijs Java教程

本篇文章主要介紹了Junit 測試之 Spring Test,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

1、導致多次Spring容器初始化問題

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

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

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

3、數據庫現場容易遭受破壞

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

4、不方便對數據操作正確性進行檢查

假如我們向登錄日志表插入了一條成功登錄日志,可是我們卻沒有對t_login_log表中是否確實添加了一條記錄進行檢查。一般情況下,我們可能是打開 數據庫,肉眼觀察  是否插入了相應的記錄,但這嚴重違背了自動測試的原則。試想在測試包括成千上萬個數據操作行為的程序時,如何用肉眼進行檢查?
只要你繼承Spring的測試套件的用例類,你就可以通過jdbcTemplate在同一事務中訪問數據庫,查詢數據的變化,驗證操作的正確性!

1. maven 配置

?
1
2
3
4
5
6
7
8
9
10
11
12
<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.創建BaseJunit4Test基類

創建 Spring Test 的基類,該類主要用來加載配置文件,設置web環境。

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

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

3.測試類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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  //標明此方法需使用事務 
  @Rollback(false) //標明使用完此方法后事務不回滾,true時為回滾 
  public void testUser(){
    System.out.println("測試Spring整合Junit4進行單元測試");
     
    AdeUser user = userManagerService.get("0");
    System.out.println(user);
    System.out.println("------------"+user.getLoginName());
  }
}
  1. 使用Spring Test 可以使用@Autowired 自動注入 相關的bean信息,而不需要自己手動通過getBean去獲取相應的bean信息。
  2. @Transaction
  3. 使用Spring Test 測試,可以 @Transaction 注解,表示該方法使用spring的事務。
  4. @Rollback(false)

標明使用完此方法后事務不回滾,true時為回滾。

比如每次打包或提交時,都執行下所有的測試類,而測試類每次都進行插入或刪除數據或導致數據庫中的數據不完整,為了防止執行測試類都修改庫中的數據,可以設置Rollback(true)。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.jianshu.com/p/00bc74a78d33?utm_source=tuicool&utm_medium=referral

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费观看一级 | 久久久综合久久久 | 最新黄色电影网站 | 国产91九色视频 | 香蕉视频网站在线观看 | 啊~用cao嗯力cao烂我视频 | 久久免费视频一区 | 免费看欧美一级特黄a大片 久久免费视频一区二区三区 | 免费在线观看成年人视频 | 亚洲精品久久久久久久久久久 | 夜夜看 | 永久av在线免费观看 | 在线播放黄色网址 | 手机在线看片国产 | 国产精选91 | 欧美成人午夜精品久久久 | 久久精品成人影院 | 素人视频在线观看免费 | 国产免费视频一区二区裸体 | 久久看免费视频 | 欧美黄色看| 久久电影一区二区 | 久久综合九色综合久久久精品综合 | 激情网站在线观看 | 国产精品久久久久久久久久久久午夜 | 欧美一级黄色录像片 | 日韩视频―中文字幕 | 2021国产精品视频 | 神马久久精品综合 | 国产精品免费大片 | 国产欧美一区二区三区免费看 | av在线成人| 精品无码久久久久久国产 | 91精品国产成人 | 毛片免费在线观看视频 | 亚洲电影免费观看高清完整版在线观 | 精品国产一区二区久久 | 男女羞羞视频在线免费观看 | 久久55| 色中色在线视频 | 99在线精品视频免费观看20 |