AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

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

來源: 責編: 時間:2023-12-24 10:14:07 280觀看
導讀Part 01、 JUnit5框架 1.1 Junit5介紹Junit5需要Java 8或更高版本,和Junit4只是一個單獨的Jar包不同,目前的Junit5組成如下:JUnit5=JUnit Platform+JUnit Jupiter+JUnit Vintage- JUnit Platform:是Junit向測試平臺演進,

tfa28資訊網——每日最新資訊28at.com

Part 01、  JUnit5框架 

1.1 Junit5介紹tfa28資訊網——每日最新資訊28at.com

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

- JUnit Platform:tfa28資訊網——每日最新資訊28at.com

是Junit向測試平臺演進,提供平臺功能的模塊,通過JUnit Platform,其他的自動化測試引擎或開發人員自己定制的引擎都可以接入Junit實現對接和執行tfa28資訊網——每日最新資訊28at.com

- JUnit Jupiter:tfa28資訊網——每日最新資訊28at.com

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

本系列就會重點圍繞Jupiter中的一些特性進行介紹。Jupiter本身也是一個基于Junit Platform的引擎實現。tfa28資訊網——每日最新資訊28at.com

- JUnit Vintage:tfa28資訊網——每日最新資訊28at.com

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

1.2 測試實例生命周期介紹tfa28資訊網——每日最新資訊28at.com

@TestInstance(TestInstance.Lifecycle.PER_CLASS)tfa28資訊網——每日最新資訊28at.com

* PER_METHOD(默認):JUnit在執行每個測試方法之前創建每個測試類的新實例 tfa28資訊網——每日最新資訊28at.com

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

1.3 Junit5常用注解介紹tfa28資訊網——每日最新資訊28at.com

@BeforeAlltfa28資訊網——每日最新資訊28at.com

JUnit5@BeforeAll注釋是JUnit4中@BeforeClass注釋的替代。它用于表示應在當前測試類中的所有測試方法之前執行的帶的方法。 tfa28資訊網——每日最新資訊28at.com

備注:@BeforeAll注釋的方法必須是靜態方法,否則會報運行時錯誤。tfa28資訊網——每日最新資訊28at.com

@BeforeEachtfa28資訊網——每日最新資訊28at.com

JUnit5@BeforeEach注釋替代了JUnit4中的@Before注釋。被注釋的方法會在當前類中的每個Test方法之前執行。也就是說有多少個test這個方法就會執行多少次。tfa28資訊網——每日最新資訊28at.com

備注:@BeforeEach注釋的方法一定不能是靜態方法,否則會報發運行時錯誤。tfa28資訊網——每日最新資訊28at.com

@AfterEachtfa28資訊網——每日最新資訊28at.com

JUnit5@AfterEach注釋是JUnit4中@After注釋的替換。它用于表示應在當前類中的每個@Test方法之后執行帶注釋的方法。tfa28資訊網——每日最新資訊28at.com

@AfterAll tfa28資訊網——每日最新資訊28at.com

JUnit5@AfterAll注釋是JUnit4中@AfterClass注釋的替換。它用于表示應在當前測試類中的所有測試之后執行帶注釋的方法。tfa28資訊網——每日最新資訊28at.com

備注:@AfterAll注釋的方法必須是靜態方法,否則會報運行時錯誤。tfa28資訊網——每日最新資訊28at.com

Junit5當中使用@BeforeEach替換了@Before使用 @AfterEach替換了@Aftertfa28資訊網——每日最新資訊28at.com

@Disabled可以用于不運行某些test的場景。tfa28資訊網——每日最新資訊28at.com

@Tag可以用于將測試分類。tfa28資訊網——每日最新資訊28at.com

JUnit Jupiter支持下列注解,用于配置測試和擴展框架。tfa28資訊網——每日最新資訊28at.com

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

圖片tfa28資訊網——每日最新資訊28at.com

圖片tfa28資訊網——每日最新資訊28at.com

Part 02、  spring-boot-test框架 

2.1 版本迭代tfa28資訊網——每日最新資訊28at.com

在JUnit4中,自定義框架通常意味著使用@RunWith注釋來指定一個自定義的運行器。使用多個運行器是有問題的。tfa28資訊網——每日最新資訊28at.com

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

而在Spring boot 2.1.x之后,我們查看@SpringBootTest 的代碼會發現,其中已經組合了@ExtendWith(SpringExtension.class),因此,無需在進行該注解的使用了。tfa28資訊網——每日最新資訊28at.com

Spring Boot 2.2.0版本開始引入JUnit5作為單元測試默認庫tfa28資訊網——每日最新資訊28at.com

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

圖片圖片tfa28資訊網——每日最新資訊28at.com

SpringBoot 2.4以上版本移除了默認對Vintage的依賴。如果需要兼容JUnit4.x版本,需要自行引入。tfa28資訊網——每日最新資訊28at.com

圖片圖片tfa28資訊網——每日最新資訊28at.com

SpringBootTest默認集成了以下功能:tfa28資訊網——每日最新資訊28at.com

圖片圖片tfa28資訊網——每日最新資訊28at.com

圖片圖片tfa28資訊網——每日最新資訊28at.com

備注:JUnit4前移注意事項tfa28資訊網——每日最新資訊28at.com

圖片圖片tfa28資訊網——每日最新資訊28at.com

2.2 Spring Boot Test中的主要注解tfa28資訊網——每日最新資訊28at.com

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

圖片圖片tfa28資訊網——每日最新資訊28at.com

圖片圖片tfa28資訊網——每日最新資訊28at.com

2.2.1 配置類型的注解tfa28資訊網——每日最新資訊28at.com

使用@SpringBootApplication啟動測試或者生產代碼,被@TestComponent描述的Bean會自動被排除掉。如果不是則需要向@SpringBootApplication添加TypeExcludeFilter。tfa28資訊網——每日最新資訊28at.com

圖片圖片tfa28資訊網——每日最新資訊28at.com

2.2.2 mock類型的注解tfa28資訊網——每日最新資訊28at.com

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

@MockBean 只能 mock 本地的代碼——或者說是自己寫的代碼,對于儲存在庫中而且又是以 Bean 的形式裝配到代碼中的類無能為力。tfa28資訊網——每日最新資訊28at.com

@SpyBean 解決了 SpringBoot 的單元測試中tfa28資訊網——每日最新資訊28at.com

@MockBean 不能 mock 庫中自動裝配的 Bean 的局限tfa28資訊網——每日最新資訊28at.com

2.2.3 自動配置類型的注解(@AutoConfigure*)tfa28資訊網——每日最新資訊28at.com

圖片圖片tfa28資訊網——每日最新資訊28at.com

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

2.2.3.1 自動配置類型有兩種使用方式tfa28資訊網——每日最新資訊28at.com

a.在功能測試(即使用@SpringBootTest)時顯示添加。tfa28資訊網——每日最新資訊28at.com

b.一般在切片測試中被隱式使用,例如@WebMvcTest注解時,隱式添加了@AutoConfigureCachetfa28資訊網——每日最新資訊28at.com

@AutoConfigureWebMvctfa28資訊網——每日最新資訊28at.com

@AutoConfigureMockMvc。tfa28資訊網——每日最新資訊28at.com

2.2.4 啟動測試類型的注解tfa28資訊網——每日最新資訊28at.com

所有的@*Test注解都被@BootstrapWith注解,它們可以啟動。tfa28資訊網——每日最新資訊28at.com

圖片圖片tfa28資訊網——每日最新資訊28at.com

ApplicationContext,是測試的入口,所有的測試類必須聲明一個@*Test注解。tfa28資訊網——每日最新資訊28at.com

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

2.2.5 常用配置介紹tfa28資訊網——每日最新資訊28at.com

@SpringBootTest,其中包含的配置項如下:tfa28資訊網——每日最新資訊28at.com

圖片圖片tfa28資訊網——每日最新資訊28at.com

@WebEnvironment,其中包含的配置項如下:tfa28資訊網——每日最新資訊28at.com

圖片圖片tfa28資訊網——每日最新資訊28at.com

Part 03、  Mockito框架 

3.1 常用的Mockito方法tfa28資訊網——每日最新資訊28at.com

圖片圖片tfa28資訊網——每日最新資訊28at.com

圖片圖片tfa28資訊網——每日最新資訊28at.com

圖片圖片tfa28資訊網——每日最新資訊28at.com

3.2 Mockito參數適配方法tfa28資訊網——每日最新資訊28at.com

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()。tfa28資訊網——每日最新資訊28at.com

Part 04、單元測試樣例 

4.1 Mock redis、kafka方法tfa28資訊網——每日最新資訊28at.com

方法1:tfa28資訊網——每日最新資訊28at.com

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

方法2:tfa28資訊網——每日最新資訊28at.com

//聲明變量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模擬登錄方法tfa28資訊網——每日最新資訊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") tfa28資訊網——每日最新資訊28at.com

4.3 遠程接口調用方法(Controller入口測試)tfa28資訊網——每日最新資訊28at.com

  • MockMVC的基本步驟

(1) mockMvc.perform執行一個請求。tfa28資訊網——每日最新資訊28at.com

(2) MockMvcRequestBuilders.get("XXX")構造一個請求。tfa28資訊網——每日最新資訊28at.com

(3) ResultActions.param添加請求傳值tfa28資訊網——每日最新資訊28at.com

(4) ResultActions.accept()設置返回類型tfa28資訊網——每日最新資訊28at.com

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

(6) ResultActions.andDo添加一個結果處理器,表示要對結果做點什么事情,比如處使用print()輸出整個響應結果信息。tfa28資訊網——每日最新資訊28at.com

(7) ResultActions.andReturn表示執行完成后返回相應的結果。tfa28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-53020-0.htmlJava常用的單元測試框架介紹

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 基于Spring Cloud Eureka,三分鐘搞懂服務發現

下一篇: 基于Spring Cloud Eureka,三分鐘搞懂服務發現

標簽:
  • 熱門焦點
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據博主數碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 太卷!Redmi MAX 100英寸電視便宜了:12999元買Redmi史上最大屏

    8月5日消息,從小米商城了解到,Redmi MAX 100英寸巨屏電視日前迎來官方優惠,到手價12999元,比發布價便宜了7000元,在大屏電視市場開卷。據了解,Redmi MAX 100
  • 零售大模型“干中學”,攀爬數字化珠峰

    文/侯煜編輯/cc來源/華爾街科技眼對于絕大多數登山愛好者而言,攀爬珠穆朗瑪峰可謂終極目標。攀登珠峰的商業路線有兩條,一是尼泊爾境內的南坡路線,一是中國境內的北坡路線。相
  • Temu起訴SHEIN,跨境電商戰事升級

    來源 | 伯虎財經(bohuFN)作者 | 陳平安日前據外媒報道,拼多多旗下跨境電商平臺Temu正對競爭對手SHEIN提起新訴訟,訴狀稱Shein&ldquo;利用市場支配力量強迫服裝廠商與之簽訂獨家
  • 中國家電海外掘金正當時|出海專題

    作者|吳南南編輯|胡展嘉運營|陳佳慧出品|零態LT(ID:LingTai_LT)2023年,出海市場戰況空前,中國創業者在海外紛紛摩拳擦掌,以期能夠把中國的商業模式、創業理念、戰略打法輸出海外,他們依
  • 一條抖音4億人圍觀 ! 這家MCN比無憂傳媒還野

    作者:Hiu 來源:互聯網品牌官01 擦邊少女空降熱搜,幕后推手曝光被網友譽為&ldquo;純欲天花板&rdquo;的女網紅井川里予,近期因為一組哥特風照片登上熱搜,引發了一場互聯網世界關于
  • 7月4日見!iQOO 11S官宣:“雞血版”驍龍8 Gen2+200W快充加持

    上半年已接近尾聲,截至目前各大品牌旗下的頂級旗艦都已悉數亮相,而下半年即將推出的頂級旗艦已經成為了數碼圈爆料的主流,其中就包括全新的iQOO 11S系
  • 2022爆款:ROG魔霸6 冰川散熱系統持續護航

    喜逢開學季,各大商家開始推出自己的新產品,進行打折促銷活動。對于忠實的端游愛好者來說,能夠擁有一款夢寐以求的筆記本電腦是一件十分開心的事。但是現在的
  • 榮耀Magic4 至臻版 首創智慧隱私通話 強勁影音系統

    2022年第一季度臨近尾聲,在該季度內,許多品牌陸續發布自己的最新產品,讓大家從全新的角度來了解當今的手機技術。手機是電子設備中,更新迭代十分迅速的一款產品,基
Top