精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java常用的單元測試框架介紹

開發 測試
本文主要講述java常用的單元測試框架,包括junit5、Mockito、SpringBootTest框架,通過講解各框架常用注解、使用樣例、注意事項,讓大家在開發過程中能夠快速、高效選擇適合自己的單元測試框架。

Part 01、  JUnit5框架 

1.1 Junit5介紹

Junit5需要Java 8或更高版本,和Junit4只是一個單獨的Jar包不同,目前的Junit5組成如下:JUnit5=JUnit Platform+JUnit Jupiter+JUnit Vintage

- JUnit Platform:

是Junit向測試平臺演進,提供平臺功能的模塊,通過JUnit Platform,其他的自動化測試引擎或開發人員自己定制的引擎都可以接入Junit實現對接和執行

- JUnit Jupiter:

這是Junit5的核心,可以看作是承載Junit4原有功能的演進,它包含了很多豐富的新特性來使JUnit自動化測試更加方便、功能更加豐富和強大。

本系列就會重點圍繞Jupiter中的一些特性進行介紹。Jupiter本身也是一個基于Junit Platform的引擎實現。

- JUnit Vintage:

Junit發展了10數年,Junit3和Junit4都積累了大量的用戶,作為新一代框架,這個模塊是對JUnit3,JUnit4版本兼容的測試引擎,使舊版本Junit的自動化測試腳本也可以順暢運行在Junit5下,它也可以看作是基于Junit Platform實現的引擎范例。

1.2 測試實例生命周期介紹

@TestInstance(TestInstance.Lifecycle.PER_CLASS)

* PER_METHOD(默認):JUnit在執行每個測試方法之前創建每個測試類的新實例 

* PER_CLASS:JUnit Jupiter在同一個測試實例上執行所有測試方法,當使用這種模式時,每個測試類將創建一個新的測試實例。因此,如果您的測試方法依賴于存儲在實例變量中的狀態,則可能需要在@BeforeEach或@AfterEach方法中重置該狀態。

1.3 Junit5常用注解介紹

@BeforeAll

JUnit5@BeforeAll注釋是JUnit4中@BeforeClass注釋的替代。它用于表示應在當前測試類中的所有測試方法之前執行的帶的方法。 

備注:@BeforeAll注釋的方法必須是靜態方法,否則會報運行時錯誤。

@BeforeEach

JUnit5@BeforeEach注釋替代了JUnit4中的@Before注釋。被注釋的方法會在當前類中的每個Test方法之前執行。也就是說有多少個test這個方法就會執行多少次。

備注:@BeforeEach注釋的方法一定不能是靜態方法,否則會報發運行時錯誤。

@AfterEach

JUnit5@AfterEach注釋是JUnit4中@After注釋的替換。它用于表示應在當前類中的每個@Test方法之后執行帶注釋的方法。

@AfterAll 

JUnit5@AfterAll注釋是JUnit4中@AfterClass注釋的替換。它用于表示應在當前測試類中的所有測試之后執行帶注釋的方法。

備注:@AfterAll注釋的方法必須是靜態方法,否則會報運行時錯誤。

Junit5當中使用@BeforeEach替換了@Before使用 @AfterEach替換了@After

@Disabled可以用于不運行某些test的場景。

@Tag可以用于將測試分類。

JUnit Jupiter支持下列注解,用于配置測試和擴展框架。

所有核心注解位于junit-jupiter-api模塊中的org.junit.jupiter.api包中。

圖片

圖片

Part 02、  spring-boot-test框架 

2.1 版本迭代

在JUnit4中,自定義框架通常意味著使用@RunWith注釋來指定一個自定義的運行器。使用多個運行器是有問題的。

Junit5在Spring boot 2.1.x之前,@SpringBootTest需要配合@ExtendWith(SpringExtension.class)才能正常工作的。

而在Spring boot 2.1.x之后,我們查看@SpringBootTest 的代碼會發現,其中已經組合了@ExtendWith(SpringExtension.class),因此,無需在進行該注解的使用了。

Spring Boot 2.2.0版本開始引入JUnit5作為單元測試默認庫

Junit5中包含JUnit Vintage:這個模塊是兼容JUnit3、JUnit4版本的測試引擎,使得舊版本的自動化測試也可以在JUnit5下正常運行。防止使用舊的junit4相關接口,可以進行依賴排除,如下圖:

圖片圖片

SpringBoot 2.4以上版本移除了默認對Vintage的依賴。如果需要兼容JUnit4.x版本,需要自行引入。

圖片圖片

SpringBootTest默認集成了以下功能:

圖片圖片

圖片圖片

備注:JUnit4前移注意事項

圖片圖片

2.2 Spring Boot Test中的主要注解

從功能上講,Spring Boot Test中的注解主要分如下幾類:

圖片圖片

圖片圖片

2.2.1 配置類型的注解

使用@SpringBootApplication啟動測試或者生產代碼,被@TestComponent描述的Bean會自動被排除掉。如果不是則需要向@SpringBootApplication添加TypeExcludeFilter。

圖片圖片

2.2.2 mock類型的注解

@MockBean和@SpyBean這兩個注解,在mockito框架中本來已經存在,且功能基本相同。Spring Boot Test又定義一份重復的注解,目的在于使MockBean和SpyBean被ApplicationContext管理,從而方便使用。MockBean和SpyBean功能非常相似,都能模擬方法的各種行為。不同之處在于MockBean是全新的對象,跟正式對象沒有關系;而SpyBean與正式對象緊密聯系,可以模擬正式對象的部分方法,沒有被模擬的方法仍然可以運行正式代碼。

@MockBean 只能 mock 本地的代碼——或者說是自己寫的代碼,對于儲存在庫中而且又是以 Bean 的形式裝配到代碼中的類無能為力。

@SpyBean 解決了 SpringBoot 的單元測試中

@MockBean 不能 mock 庫中自動裝配的 Bean 的局限

2.2.3 自動配置類型的注解(@AutoConfigure*)

圖片圖片

這些注解可以搭配@\*Test使用,用于開啟在@\*Test中未自動配置的功能。例如@SpringBootTest和@AutoConfigureMockMvc組合后,就可以注入org.springframework.test.web.servlet.MockMvc。

2.2.3.1 自動配置類型有兩種使用方式

a.在功能測試(即使用@SpringBootTest)時顯示添加。

b.一般在切片測試中被隱式使用,例如@WebMvcTest注解時,隱式添加了@AutoConfigureCache

@AutoConfigureWebMvc

@AutoConfigureMockMvc。

2.2.4 啟動測試類型的注解

所有的@*Test注解都被@BootstrapWith注解,它們可以啟動。

圖片圖片

ApplicationContext,是測試的入口,所有的測試類必須聲明一個@*Test注解。

除了@SpringBootTest之外的注解都是用來進行切面測試的,他們會默認導入一些自動配置。一般情況下,推薦使用@SpringBootTest而非其它切片測試的注解,簡單有效。若某次改動僅涉及特定切片,可以考慮使用切片測試。

2.2.5 常用配置介紹

@SpringBootTest,其中包含的配置項如下:

圖片圖片

@WebEnvironment,其中包含的配置項如下:

圖片圖片

Part 03、  Mockito框架 

3.1 常用的Mockito方法

圖片圖片

圖片圖片

圖片圖片

3.2 Mockito參數適配方法

Mockito.anyString()
Mockito.anyInt()
Mockito.anyLong()
Mockito.anyDouble()
Mockito.anyObject()   表示任何對象
Mockito.any(clazz)     表示任何屬于clazz的對象
Mockito.anyCollection()
Mockito.anyCollectionOf(clazz)
Mockito.anyList(Map, set)
Mockito.anyListOf(clazz)

注:Mockito.anyString() 不能匹配到 null 參數,如果還需要匹配 null,可以使用 Mockito.any()。

Part 04、單元測試樣例 

4.1 Mock redis、kafka方法

方法1:

@SpringBootTest通過@Resource引入對象測試,需要依賴redis環境(會啟動spring boot 容器)

方法2:

//聲明變量
private  AsyncService asyncService;
//需要mock的對象
private StringRedisTemplate stringRedisTemplate;
//創建要測試對象
asyncService = new AsyncServiceImpl();
//mock對象(也可以使用@Mock注解方式)
StringRedisTemplate stringRedisTemplate =
mock(StringRedisTemplate.class,Mockito.RETURNS_DEEP_STUBS);
KafkaProducer kafkaProducer = mock(KafkaProducer.class);
//屬性賦值
ReflectionTestUtils.setField(asyncService,
"stringRedisTemplate", stringRedisTemplate);
ReflectionTestUtils.setField(asyncService,
"kafkaProducer", kafkaProducer);
@Test
@DisplayName("mock redis、kafka 測試")
public void redisTest() {
when(stringRedisTemplate.opsForValue().get(anyString())).thenReturn("2222");
   Assertions.assertTrue(asyncService.testRedis("真實方法調用"));
}

4.2 Spring Security模擬登錄方法

<dependency> 
 <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-test</artifactId> 
    <version>5.6.5</version> 
    <scope>test</scope> 
</dependency>

注解:@WithMockUser(roles = "ROOT", username = "root") 

4.3 遠程接口調用方法(Controller入口測試)

  • MockMVC的基本步驟

(1) mockMvc.perform執行一個請求。

(2) MockMvcRequestBuilders.get("XXX")構造一個請求。

(3) ResultActions.param添加請求傳值

(4) ResultActions.accept()設置返回類型

(5) ResultActions.andExpect添加執行完成后的斷言。

(6) ResultActions.andDo添加一個結果處理器,表示要對結果做點什么事情,比如處使用print()輸出整個響應結果信息。

(7) ResultActions.andReturn表示執行完成后返回相應的結果。

責任編輯:龐桂玉 來源: 移動Labs
相關推薦

2017-01-14 23:42:49

單元測試框架軟件測試

2011-07-04 18:16:42

單元測試

2022-05-12 09:37:03

測試JUnit開發

2022-04-27 08:17:07

OCMock單元測試集成

2024-10-16 16:09:32

2009-06-01 10:47:32

jboss seam例jboss seam開jboss seam

2010-01-15 14:10:42

C++單元測試

2009-08-19 09:00:48

單元測試框架自動化測試

2010-08-27 09:11:27

Python單元測試

2009-09-01 16:45:00

C#單元測試工具

2023-07-26 08:58:45

Golang單元測試

2011-05-16 16:52:09

單元測試徹底測試

2017-01-16 12:12:29

單元測試JUnit

2017-01-14 23:26:17

單元測試JUnit測試

2011-06-14 15:56:42

單元測試

2020-08-18 08:10:02

單元測試Java

2024-04-26 11:14:34

C#單元測試框架

2017-03-23 16:02:10

Mock技術單元測試

2021-05-05 11:38:40

TestNGPowerMock單元測試

2020-05-07 17:30:49

開發iOS技術
點贊
收藏

51CTO技術棧公眾號

久久久蜜臀国产一区二区| 99综合视频| 精品少妇一区二区三区免费观看| 和岳每晚弄的高潮嗷嗷叫视频| 亚洲av成人精品日韩在线播放| 日韩精品电影在线| 欧美人与性动交| 欧美多人猛交狂配| 视频一区日韩精品| 在线观看日韩精品| 久久精品无码中文字幕| 国产原创av在线| 国产精品亚洲午夜一区二区三区| 97视频在线观看免费| 亚洲欧美日韩第一页| 黑色丝袜福利片av久久| 欧美日韩精品综合在线| 日本韩国欧美在线观看| 成人午夜在线影视| 欧美韩国日本综合| 国产精品初高中精品久久| 在线观看黄色网| 亚洲综合欧美| 欧美激情精品久久久| 人人艹在线视频| 国产探花在线精品| 欧美精品一区二区久久久 | 91视频免费在线看| 色综合久久影院| 99久久99精品久久久久久| 91精品久久久久久久久青青| 国产又大又黄又粗| 亚洲午夜一级| 欧美成人三级视频网站| 操她视频在线观看| 精品av一区二区| 精品一区二区三区三区| 风韵丰满熟妇啪啪区老熟熟女| 欧美97人人模人人爽人人喊视频| 欧美日韩性视频| 阿v天堂2018| 国产深夜视频在线观看| 一区二区三区四区蜜桃| 老汉色影院首页| 九七久久人人| 综合婷婷亚洲小说| 亚洲韩国日本中文字幕| 国产精品大尺度| 国产91免费视频| va视频在线观看| 狠狠色综合播放一区二区| 国产精品一区二区三区久久久| www.国产一区二区| 媚黑女一区二区| 日本久久久久久久久久久| 西西44rtwww国产精品| 国产亚洲精品bv在线观看| 久久久久日韩精品久久久男男 | 亚洲综合图色| 精品偷拍一区二区三区在线看| 欧产日产国产精品98| 福利在线一区| 日韩av在线免费观看| 久久精品综合视频| 免费看av成人| 在线观看欧美www| 亚洲不卡的av| 在线精品视频在线观看高清| 欧美xxxx综合视频| 久久久久人妻一区精品色欧美| 极品日韩av| 奇门遁甲1982国语版免费观看高清| 五月天综合激情网| 日韩国产欧美在线播放| 国产精品美腿一区在线看| 一区二区日韩在线观看| 国产麻豆成人精品| 久久国产一区| jzzjzzjzz亚洲成熟少妇| 国产精品美女久久久久久久久 | 午夜小视频在线| 国产精品精品国产色婷婷| 成年人三级视频| 欧美v亚洲v| 欧美香蕉大胸在线视频观看| 好男人www社区| 激情不卡一区二区三区视频在线| 亚洲成av人片在线观看香蕉| 亚洲自拍偷拍一区二区| 99久久久久国产精品| 久久久噜噜噜久久久| 天天操夜夜操视频| 国产一区二区成人久久免费影院 | 国产精品午夜一区二区三区| www.亚洲一区| 在线观看亚洲欧美| 国产在线一区观看| 欧美日本韩国国产| 2024最新电影免费在线观看| 欧美日韩国内自拍| 精品亚洲视频在线| 亚洲动漫精品| 久久久精品久久久| 精品国产乱子伦| 国产一本一道久久香蕉| 日本精品一区二区三区视频| 在线观看操人| 欧美日韩一区二区三区视频| 亚洲午夜久久久久久久久| 久久亚洲影视| 777国产偷窥盗摄精品视频| 国产一区二区女内射| av在线播放不卡| 激情视频小说图片| 国产91亚洲精品久久久| 精品在线小视频| 久久精品www| 日本不卡123| 久久久久久久久久久久久久一区 | 亚洲欧洲日本mm| 91久久精品久久国产性色也91| 亚洲欧美色视频| 一区二区三区高清不卡| 天天影视色综合| 精品国产一区二区三区噜噜噜| 国内精品在线一区| 99视频在线观看免费| 欧美国产激情二区三区| 成人综合视频在线| 精品亚洲自拍| 欧美第一黄网免费网站| 国产999久久久| 国产精品毛片久久久久久久| 精品少妇无遮挡毛片| 欧美久久精品| 欧美激情高清视频| 超碰人人人人人人| 亚洲人成伊人成综合网小说| 高清av免费看| 日韩欧美一区二区三区在线视频| 日本国产精品视频| 欧美成人片在线| 色综合一区二区| 人妻少妇一区二区| 视频在线观看91| 日韩在线国产| 国产成+人+综合+亚洲欧美| 中文精品99久久国产香蕉| 黄色av一区二区| 国产午夜精品一区二区三区嫩草| jizzjizzxxxx| 精品久久国产| 国产精品自拍视频| 免费在线观看黄| 欧美久久久久免费| 中文字幕另类日韩欧美亚洲嫩草| 久久er精品视频| 裸体大乳女做爰69| 国产一区二区三区黄网站| 欧美另类暴力丝袜| 欧美一级淫片aaaaaa| 精品国产91久久久| 国产精品九九九九九| 日日夜夜精品免费视频| 亚洲乱码一区二区三区 | 精品日本一区二区三区| 亚洲色图官网| 亚洲一区999| 国产免费黄色大片| 亚洲午夜影视影院在线观看| 国产伦精品一区二区免费| 亚洲欧美网站| 亚洲精品tv久久久久久久久| 精品国产一区二区三区性色av | 福利影院在线看| 亚洲免费小视频| 亚洲专区第一页| 亚洲精品成人精品456| 逼特逼视频在线观看| 亚洲一区中文| 午夜精品一区二区在线观看的| 国语自产精品视频在线看抢先版结局| 久久伊人色综合| 色欲av伊人久久大香线蕉影院| 色8久久人人97超碰香蕉987| 激情高潮到大叫狂喷水| 成人涩涩免费视频| www.天天射.com| 欧美日韩中文| 日韩资源av在线| 久久九九精品视频| 热门国产精品亚洲第一区在线| 日韩av中文| 亚洲黄色片网站| 97av免费视频| 懂色av影视一区二区三区| 老司机精品免费视频| www.欧美.com| 亚洲免费成人在线视频| 国产视频一区在线观看一区免费| 制服国产精品| 欧美网色网址| 99热99热| 欧美一区=区三区| 韩国v欧美v日本v亚洲| 丝袜美腿美女被狂躁在线观看| 亚洲成人精品av| 国产精品视频第一页| 色综合视频一区二区三区高清| caoporn91| 久久精品人人爽人人爽| 黄色在线免费播放| 极品尤物av久久免费看| 久久精品.com| 国产字幕视频一区二区| 欧美婷婷久久| 美女主播精品视频一二三四| 成人精品aaaa网站| 欧美日韩精品免费观看视欧美高清免费大片 | 成年人在线视频| 亚洲第一福利网站| 精品人妻一区二区三区含羞草| 欧美亚洲高清一区二区三区不卡| 日韩黄色a级片| 一区二区三区自拍| 精品无码久久久久成人漫画| 日本一区二区三区视频视频| av在线网站观看| av动漫一区二区| 日韩精品视频一区二区| 高清免费成人av| 麻豆精品国产传媒| 黄色日韩网站视频| 手机在线视频一区| 精品一区二区三区视频在线观看| 丰满少妇在线观看| 老司机午夜精品视频在线观看| 欧美精品一区免费| 日韩午夜电影| 黄色成人在线看| 999在线观看精品免费不卡网站| 日本黄色片一级片| 国内成人在线| 日本一级黄视频| 国内揄拍国内精品久久| 手机看片日韩国产| 91精品一区二区三区综合| 亚洲成色www久久网站| 国产欧美一区二区三区精品观看 | 一本色道久久综合狠狠躁的推荐| 日韩黄色精品视频| 欧美视频在线观看免费| 欧美日韩一二三四区| 欧美午夜视频在线观看| 天天射天天干天天| 欧美视频中文字幕| 91丨porny丨在线中文| 69堂国产成人免费视频| 国产美女免费视频| 精品国产一区二区亚洲人成毛片| www.天堂av.com| 亚洲成人久久网| 香蕉久久一区二区三区| 亚洲最大在线视频| 欧美日韩在线资源| 欧美激情伊人电影| 最近高清中文在线字幕在线观看1| 秋霞av国产精品一区| 福利一区二区三区视频在线观看| 成人国产精品色哟哟| aaa国产精品视频| 久久精品午夜一区二区福利| 欧美精品一区二区三区中文字幕| 一区二区三区不卡在线| 欧美午夜影院| 中国丰满人妻videoshd| 激情另类小说区图片区视频区| 激情小说欧美色图| 久久久久久久久久久久久夜| 天天爽天天爽天天爽| 亚洲超碰精品一区二区| 秋霞精品一区二区三区| 在线播放一区二区三区| 欧美天堂在线视频| 在线视频欧美日韩精品| 女人黄色免费在线观看| 日本久久久久久久久| 精品视频一区二区三区在线观看| 国产激情一区二区三区在线观看 | 国产欧美一区二区三区鸳鸯浴 | 国产黄网站在线观看| 97婷婷涩涩精品一区| 欧美高清免费| 狠狠色综合欧美激情| 婷婷综合亚洲| 久久无码高潮喷水| 国产一区二区在线免费观看| 亚洲黄色在线网站| 亚洲精品欧美在线| 国产suv精品一区二区33| 日韩精品一区二区三区视频播放| 可以免费看污视频的网站在线| 久热国产精品视频| 免费成人美女女| 国产亚洲福利社区| 99久久婷婷| 男女无套免费视频网站动漫| 成人av资源在线观看| 亚洲不卡在线播放| 日本大香伊一区二区三区| 人妻一区二区三区| zzijzzij亚洲日本成熟少妇| 中国字幕a在线看韩国电影| 不卡视频一区| 久久精品欧美一区| 白嫩少妇丰满一区二区| youjizz久久| 免费在线观看国产精品| 欧美日韩国产不卡| 成人综合影院| 人妖精品videosex性欧美| 成人台湾亚洲精品一区二区 | 亚洲区一区二| 污免费在线观看| 中文字幕亚洲成人| 中文字幕欧美色图| 一本久久综合亚洲鲁鲁| 成人动漫一区| 久久免费99精品久久久久久| 亚洲成人资源| 中文字幕人妻一区| 一二三区精品福利视频| 国产成人三级在线播放| 久久亚洲精品一区二区| 欧美黄页在线免费观看| 亚洲不卡1区| 香蕉成人久久| 一区二区三区四区免费| 色综合网色综合| 黄视频在线播放| 国产999精品久久久| 狠狠做六月爱婷婷综合aⅴ| 国产成人a亚洲精v品无码| 91美女福利视频| www.国产com| 亚洲欧美日韩久久久久久| 欧美男体视频| 日韩资源av在线| 精品综合久久久久久8888| www深夜成人a√在线| 884aa四虎影成人精品一区| 国产视频一区二区| 亚洲综合一区二区不卡| 欧美视频日韩| av2014天堂网| 欧美性猛交xxxx免费看漫画| 蜜桃视频在线入口www| 国产精品看片资源| 91成人国产| 最新日本中文字幕| 日韩欧美成人精品| 丁香婷婷在线| 91福利视频导航| 亚洲伦伦在线| 91激情视频在线观看| 欧美久久久一区| 91九色在线看| 日本在线观看不卡| 国产又黄又大久久| 日本污视频在线观看| 亚洲欧美日韩图片| 99精品美女视频在线观看热舞| 国产乱子伦精品视频| 97精品超碰一区二区三区| 免费黄色av片| 欧美黑人xxx| 四虎884aa成人精品最新| 天天操天天爱天天爽| 亚洲另类春色国产| 三级理论午夜在线观看| 国产噜噜噜噜久久久久久久久| 欧美激情日韩| 日本一级免费视频| 欧美一区二区日韩| 粉嫩一区二区| 欧美美女黄色网| 久久久久国产精品厨房| 国产黄色一级大片| 日本精品一区二区三区在线播放视频 | 亚洲美女av黄| 懂色av色香蕉一区二区蜜桃| 成人免费视频91| 国产精品色一区二区三区| 成人午夜免费在线观看| 国产精品日韩欧美大师| 亚洲日韩视频| 多男操一女视频| 亚洲精品日韩久久久| 日韩一级淫片| 国产精品入口免费软件|