日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

Java常用的單元測(cè)試框架介紹

來(lái)源: 責(zé)編: 時(shí)間:2023-12-24 10:14:07 267觀看
導(dǎo)讀Part 01、 JUnit5框架 1.1 Junit5介紹Junit5需要Java 8或更高版本,和Junit4只是一個(gè)單獨(dú)的Jar包不同,目前的Junit5組成如下:JUnit5=JUnit Platform+JUnit Jupiter+JUnit Vintage- JUnit Platform:是Junit向測(cè)試平臺(tái)演進(jìn),

T2I28資訊網(wǎng)——每日最新資訊28at.com

Part 01、  JUnit5框架 

1.1 Junit5介紹T2I28資訊網(wǎng)——每日最新資訊28at.com

Junit5需要Java 8或更高版本,和Junit4只是一個(gè)單獨(dú)的Jar包不同,目前的Junit5組成如下:JUnit5=JUnit Platform+JUnit Jupiter+JUnit VintageT2I28資訊網(wǎng)——每日最新資訊28at.com

- JUnit Platform:T2I28資訊網(wǎng)——每日最新資訊28at.com

是Junit向測(cè)試平臺(tái)演進(jìn),提供平臺(tái)功能的模塊,通過(guò)JUnit Platform,其他的自動(dòng)化測(cè)試引擎或開發(fā)人員自己定制的引擎都可以接入Junit實(shí)現(xiàn)對(duì)接和執(zhí)行T2I28資訊網(wǎng)——每日最新資訊28at.com

- JUnit Jupiter:T2I28資訊網(wǎng)——每日最新資訊28at.com

這是Junit5的核心,可以看作是承載Junit4原有功能的演進(jìn),它包含了很多豐富的新特性來(lái)使JUnit自動(dòng)化測(cè)試更加方便、功能更加豐富和強(qiáng)大。T2I28資訊網(wǎng)——每日最新資訊28at.com

本系列就會(huì)重點(diǎn)圍繞Jupiter中的一些特性進(jìn)行介紹。Jupiter本身也是一個(gè)基于Junit Platform的引擎實(shí)現(xiàn)。T2I28資訊網(wǎng)——每日最新資訊28at.com

- JUnit Vintage:T2I28資訊網(wǎng)——每日最新資訊28at.com

Junit發(fā)展了10數(shù)年,Junit3和Junit4都積累了大量的用戶,作為新一代框架,這個(gè)模塊是對(duì)JUnit3,JUnit4版本兼容的測(cè)試引擎,使舊版本Junit的自動(dòng)化測(cè)試腳本也可以順暢運(yùn)行在Junit5下,它也可以看作是基于Junit Platform實(shí)現(xiàn)的引擎范例。T2I28資訊網(wǎng)——每日最新資訊28at.com

1.2 測(cè)試實(shí)例生命周期介紹T2I28資訊網(wǎng)——每日最新資訊28at.com

@TestInstance(TestInstance.Lifecycle.PER_CLASS)T2I28資訊網(wǎng)——每日最新資訊28at.com

* PER_METHOD(默認(rèn)):JUnit在執(zhí)行每個(gè)測(cè)試方法之前創(chuàng)建每個(gè)測(cè)試類的新實(shí)例 T2I28資訊網(wǎng)——每日最新資訊28at.com

* PER_CLASS:JUnit Jupiter在同一個(gè)測(cè)試實(shí)例上執(zhí)行所有測(cè)試方法,當(dāng)使用這種模式時(shí),每個(gè)測(cè)試類將創(chuàng)建一個(gè)新的測(cè)試實(shí)例。因此,如果您的測(cè)試方法依賴于存儲(chǔ)在實(shí)例變量中的狀態(tài),則可能需要在@BeforeEach或@AfterEach方法中重置該狀態(tài)。T2I28資訊網(wǎng)——每日最新資訊28at.com

1.3 Junit5常用注解介紹T2I28資訊網(wǎng)——每日最新資訊28at.com

@BeforeAllT2I28資訊網(wǎng)——每日最新資訊28at.com

JUnit5@BeforeAll注釋是JUnit4中@BeforeClass注釋的替代。它用于表示應(yīng)在當(dāng)前測(cè)試類中的所有測(cè)試方法之前執(zhí)行的帶的方法。 T2I28資訊網(wǎng)——每日最新資訊28at.com

備注:@BeforeAll注釋的方法必須是靜態(tài)方法,否則會(huì)報(bào)運(yùn)行時(shí)錯(cuò)誤。T2I28資訊網(wǎng)——每日最新資訊28at.com

@BeforeEachT2I28資訊網(wǎng)——每日最新資訊28at.com

JUnit5@BeforeEach注釋替代了JUnit4中的@Before注釋。被注釋的方法會(huì)在當(dāng)前類中的每個(gè)Test方法之前執(zhí)行。也就是說(shuō)有多少個(gè)test這個(gè)方法就會(huì)執(zhí)行多少次。T2I28資訊網(wǎng)——每日最新資訊28at.com

備注:@BeforeEach注釋的方法一定不能是靜態(tài)方法,否則會(huì)報(bào)發(fā)運(yùn)行時(shí)錯(cuò)誤。T2I28資訊網(wǎng)——每日最新資訊28at.com

@AfterEachT2I28資訊網(wǎng)——每日最新資訊28at.com

JUnit5@AfterEach注釋是JUnit4中@After注釋的替換。它用于表示應(yīng)在當(dāng)前類中的每個(gè)@Test方法之后執(zhí)行帶注釋的方法。T2I28資訊網(wǎng)——每日最新資訊28at.com

@AfterAll T2I28資訊網(wǎng)——每日最新資訊28at.com

JUnit5@AfterAll注釋是JUnit4中@AfterClass注釋的替換。它用于表示應(yīng)在當(dāng)前測(cè)試類中的所有測(cè)試之后執(zhí)行帶注釋的方法。T2I28資訊網(wǎng)——每日最新資訊28at.com

備注:@AfterAll注釋的方法必須是靜態(tài)方法,否則會(huì)報(bào)運(yùn)行時(shí)錯(cuò)誤。T2I28資訊網(wǎng)——每日最新資訊28at.com

Junit5當(dāng)中使用@BeforeEach替換了@Before使用 @AfterEach替換了@AfterT2I28資訊網(wǎng)——每日最新資訊28at.com

@Disabled可以用于不運(yùn)行某些test的場(chǎng)景。T2I28資訊網(wǎng)——每日最新資訊28at.com

@Tag可以用于將測(cè)試分類。T2I28資訊網(wǎng)——每日最新資訊28at.com

JUnit Jupiter支持下列注解,用于配置測(cè)試和擴(kuò)展框架。T2I28資訊網(wǎng)——每日最新資訊28at.com

所有核心注解位于junit-jupiter-api模塊中的org.junit.jupiter.api包中。T2I28資訊網(wǎng)——每日最新資訊28at.com

圖片T2I28資訊網(wǎng)——每日最新資訊28at.com

圖片T2I28資訊網(wǎng)——每日最新資訊28at.com

Part 02、  spring-boot-test框架 

2.1 版本迭代T2I28資訊網(wǎng)——每日最新資訊28at.com

在JUnit4中,自定義框架通常意味著使用@RunWith注釋來(lái)指定一個(gè)自定義的運(yùn)行器。使用多個(gè)運(yùn)行器是有問(wèn)題的。T2I28資訊網(wǎng)——每日最新資訊28at.com

Junit5在Spring boot 2.1.x之前,@SpringBootTest需要配合@ExtendWith(SpringExtension.class)才能正常工作的。T2I28資訊網(wǎng)——每日最新資訊28at.com

而在Spring boot 2.1.x之后,我們查看@SpringBootTest 的代碼會(huì)發(fā)現(xiàn),其中已經(jīng)組合了@ExtendWith(SpringExtension.class),因此,無(wú)需在進(jìn)行該注解的使用了。T2I28資訊網(wǎng)——每日最新資訊28at.com

Spring Boot 2.2.0版本開始引入JUnit5作為單元測(cè)試默認(rèn)庫(kù)T2I28資訊網(wǎng)——每日最新資訊28at.com

Junit5中包含JUnit Vintage:這個(gè)模塊是兼容JUnit3、JUnit4版本的測(cè)試引擎,使得舊版本的自動(dòng)化測(cè)試也可以在JUnit5下正常運(yùn)行。防止使用舊的junit4相關(guān)接口,可以進(jìn)行依賴排除,如下圖:T2I28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片T2I28資訊網(wǎng)——每日最新資訊28at.com

SpringBoot 2.4以上版本移除了默認(rèn)對(duì)Vintage的依賴。如果需要兼容JUnit4.x版本,需要自行引入。T2I28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片T2I28資訊網(wǎng)——每日最新資訊28at.com

SpringBootTest默認(rèn)集成了以下功能:T2I28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片T2I28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片T2I28資訊網(wǎng)——每日最新資訊28at.com

備注:JUnit4前移注意事項(xiàng)T2I28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片T2I28資訊網(wǎng)——每日最新資訊28at.com

2.2 Spring Boot Test中的主要注解T2I28資訊網(wǎng)——每日最新資訊28at.com

從功能上講,Spring Boot Test中的注解主要分如下幾類:T2I28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片T2I28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片T2I28資訊網(wǎng)——每日最新資訊28at.com

2.2.1 配置類型的注解T2I28資訊網(wǎng)——每日最新資訊28at.com

使用@SpringBootApplication啟動(dòng)測(cè)試或者生產(chǎn)代碼,被@TestComponent描述的Bean會(huì)自動(dòng)被排除掉。如果不是則需要向@SpringBootApplication添加TypeExcludeFilter。T2I28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片T2I28資訊網(wǎng)——每日最新資訊28at.com

2.2.2 mock類型的注解T2I28資訊網(wǎng)——每日最新資訊28at.com

@MockBean和@SpyBean這兩個(gè)注解,在mockito框架中本來(lái)已經(jīng)存在,且功能基本相同。Spring Boot Test又定義一份重復(fù)的注解,目的在于使MockBean和SpyBean被ApplicationContext管理,從而方便使用。MockBean和SpyBean功能非常相似,都能模擬方法的各種行為。不同之處在于MockBean是全新的對(duì)象,跟正式對(duì)象沒有關(guān)系;而SpyBean與正式對(duì)象緊密聯(lián)系,可以模擬正式對(duì)象的部分方法,沒有被模擬的方法仍然可以運(yùn)行正式代碼。T2I28資訊網(wǎng)——每日最新資訊28at.com

@MockBean 只能 mock 本地的代碼——或者說(shuō)是自己寫的代碼,對(duì)于儲(chǔ)存在庫(kù)中而且又是以 Bean 的形式裝配到代碼中的類無(wú)能為力。T2I28資訊網(wǎng)——每日最新資訊28at.com

@SpyBean 解決了 SpringBoot 的單元測(cè)試中T2I28資訊網(wǎng)——每日最新資訊28at.com

@MockBean 不能 mock 庫(kù)中自動(dòng)裝配的 Bean 的局限T2I28資訊網(wǎng)——每日最新資訊28at.com

2.2.3 自動(dòng)配置類型的注解(@AutoConfigure*)T2I28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片T2I28資訊網(wǎng)——每日最新資訊28at.com

這些注解可以搭配@/*Test使用,用于開啟在@/*Test中未自動(dòng)配置的功能。例如@SpringBootTest和@AutoConfigureMockMvc組合后,就可以注入org.springframework.test.web.servlet.MockMvc。T2I28資訊網(wǎng)——每日最新資訊28at.com

2.2.3.1 自動(dòng)配置類型有兩種使用方式T2I28資訊網(wǎng)——每日最新資訊28at.com

a.在功能測(cè)試(即使用@SpringBootTest)時(shí)顯示添加。T2I28資訊網(wǎng)——每日最新資訊28at.com

b.一般在切片測(cè)試中被隱式使用,例如@WebMvcTest注解時(shí),隱式添加了@AutoConfigureCacheT2I28資訊網(wǎng)——每日最新資訊28at.com

@AutoConfigureWebMvcT2I28資訊網(wǎng)——每日最新資訊28at.com

@AutoConfigureMockMvc。T2I28資訊網(wǎng)——每日最新資訊28at.com

2.2.4 啟動(dòng)測(cè)試類型的注解T2I28資訊網(wǎng)——每日最新資訊28at.com

所有的@*Test注解都被@BootstrapWith注解,它們可以啟動(dòng)。T2I28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片T2I28資訊網(wǎng)——每日最新資訊28at.com

ApplicationContext,是測(cè)試的入口,所有的測(cè)試類必須聲明一個(gè)@*Test注解。T2I28資訊網(wǎng)——每日最新資訊28at.com

除了@SpringBootTest之外的注解都是用來(lái)進(jìn)行切面測(cè)試的,他們會(huì)默認(rèn)導(dǎo)入一些自動(dòng)配置。一般情況下,推薦使用@SpringBootTest而非其它切片測(cè)試的注解,簡(jiǎn)單有效。若某次改動(dòng)僅涉及特定切片,可以考慮使用切片測(cè)試。T2I28資訊網(wǎng)——每日最新資訊28at.com

2.2.5 常用配置介紹T2I28資訊網(wǎng)——每日最新資訊28at.com

@SpringBootTest,其中包含的配置項(xiàng)如下:T2I28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片T2I28資訊網(wǎng)——每日最新資訊28at.com

@WebEnvironment,其中包含的配置項(xiàng)如下:T2I28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片T2I28資訊網(wǎng)——每日最新資訊28at.com

Part 03、  Mockito框架 

3.1 常用的Mockito方法T2I28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片T2I28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片T2I28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片T2I28資訊網(wǎng)——每日最新資訊28at.com

3.2 Mockito參數(shù)適配方法T2I28資訊網(wǎng)——每日最新資訊28at.com

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

注:Mockito.anyString() 不能匹配到 null 參數(shù),如果還需要匹配 null,可以使用 Mockito.any()。T2I28資訊網(wǎng)——每日最新資訊28at.com

Part 04、單元測(cè)試樣例 

4.1 Mock redis、kafka方法T2I28資訊網(wǎng)——每日最新資訊28at.com

方法1:T2I28資訊網(wǎng)——每日最新資訊28at.com

@SpringBootTest通過(guò)@Resource引入對(duì)象測(cè)試,需要依賴redis環(huán)境(會(huì)啟動(dòng)spring boot 容器)

方法2:T2I28資訊網(wǎng)——每日最新資訊28at.com

//聲明變量private  AsyncService asyncService;//需要mock的對(duì)象private StringRedisTemplate stringRedisTemplate;//創(chuàng)建要測(cè)試對(duì)象asyncService = new AsyncServiceImpl();//mock對(duì)象(也可以使用@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 測(cè)試")public void redisTest() {when(stringRedisTemplate.opsForValue().get(anyString())).thenReturn("2222");   Assertions.assertTrue(asyncService.testRedis("真實(shí)方法調(diào)用"));}

4.2 Spring Security模擬登錄方法T2I28資訊網(wǎng)——每日最新資訊28at.com

<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") T2I28資訊網(wǎng)——每日最新資訊28at.com

4.3 遠(yuǎn)程接口調(diào)用方法(Controller入口測(cè)試)T2I28資訊網(wǎng)——每日最新資訊28at.com

  • MockMVC的基本步驟

(1) mockMvc.perform執(zhí)行一個(gè)請(qǐng)求。T2I28資訊網(wǎng)——每日最新資訊28at.com

(2) MockMvcRequestBuilders.get("XXX")構(gòu)造一個(gè)請(qǐng)求。T2I28資訊網(wǎng)——每日最新資訊28at.com

(3) ResultActions.param添加請(qǐng)求傳值T2I28資訊網(wǎng)——每日最新資訊28at.com

(4) ResultActions.accept()設(shè)置返回類型T2I28資訊網(wǎng)——每日最新資訊28at.com

(5) ResultActions.andExpect添加執(zhí)行完成后的斷言。T2I28資訊網(wǎng)——每日最新資訊28at.com

(6) ResultActions.andDo添加一個(gè)結(jié)果處理器,表示要對(duì)結(jié)果做點(diǎn)什么事情,比如處使用print()輸出整個(gè)響應(yīng)結(jié)果信息。T2I28資訊網(wǎng)——每日最新資訊28at.com

(7) ResultActions.andReturn表示執(zhí)行完成后返回相應(yīng)的結(jié)果。T2I28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-53017-0.htmlJava常用的單元測(cè)試框架介紹

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 國(guó)產(chǎn)銀河麒麟桌面操作系統(tǒng) V10 再升級(jí)

下一篇: 基于Spring Cloud Eureka,三分鐘搞懂服務(wù)發(fā)現(xiàn)

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 主站蜘蛛池模板: 商南县| 永济市| 磐安县| 常宁市| 京山县| 东丽区| 吉林市| 克拉玛依市| 南开区| 甘孜县| 湖州市| 台南县| 奈曼旗| 尉犁县| 新河县| 广饶县| 米易县| 宁安市| 高要市| 巴中市| 南澳县| 论坛| 穆棱市| 内黄县| 蕉岭县| 临邑县| 连南| 镇雄县| 白银市| 科技| 祥云县| 毕节市| 翼城县| 库车县| 赤峰市| 天峻县| 雷州市| 榆社县| 保靖县| 库车县| 衡阳市|