[跟著官方文檔學JUnit5][二][WritingTests][學習筆記]

      網友投稿 806 2022-05-29

      以下示例提供了在JUnit Jupiter中編寫測試的最少要求。

      package com.example.util; public class Calculator { public int add(int number1, int number2) { return number1 + number2; } }

      package com.example; import com.example.util.Calculator; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; public class MyFirstJUnitJupiterTests { private final Calculator calculator = new Calculator(); @Test void addition() { assertEquals(2, calculator.add(1, 1)); } }

      [跟著官方文檔學JUnit5][二][WritingTests][學習筆記]

      1.注解總覽

      JUnit Jupiter支持以下用于配置測試和拓展框架的注解。除非另外說明,所有核心注解都位于org.junit.jupiter.api包中,這個包在junit-jupiter-api模塊中。

      2.元注解和組合注解

      JUnit Jupiter注解可以用作元注解。意味著可以定義自己的組合注解,該注解將自動繼承其元注解的語義。

      比如,你可以創建名的為@Tag(“fast”)的自定義組合注解,而不是整個代碼庫中復制和粘貼@Tag(“fast”),如下所示。然后@Fast可以用作@Tag(“fast”)的直接替代品。

      import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.junit.jupiter.api.Tag; @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Tag("fast") public @interface Fast { }

      下面這個@Test方法描述了@Fast注解的用法

      @Fast @Test void myFastTest(){ //... }

      3.測試類和方法

      測試類:任何包含至少一個測試方法的頂級類、靜態成員類或@Nested類。測試類不能是抽象的,并且必須具有單個構造函數。

      測試方法:使用@Test、@RepeatedTest、@ParameerizedTest、@TestFactory或@TestTemplate直接注解或元注解的任何實例方法。

      生命周期方法:使用@BeforeAll、@AfterAll、@BeforeEach或@AfterEach直接注解或元注解的任何方法。

      測試方法和生命周期方法可以在當前測試類中本地聲明,從超類繼承,也可以從接口繼承(參考測試接口和默認方法)。此外,測試方法和生命周期方法不得抽象,并且不得返回值(返回值所需的@TestFactory方法除外)。

      類和方法的可見性:測試類、測試方法和生命周期方法不要求public,但不能為private。通常建議省略測試類、測試方法和生命周期方法的public修飾符,除非有技術原因這樣做。例如,當一個測試類被另一個包中的測試類拓展時。類和方法加上public的另一個技術原因是,在使用Java模塊系統時,簡化模塊路徑上的測試。

      以下的測試類演示了使用@Test方法和所有受支持的生命周期方法。更多信息在測試執行順序和回調包裝行為。

      例子:設定為測試不通過

      import org.junit.jupiter.api.*; import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assumptions.*; class StandardTests { @BeforeAll static void initAll() { } @BeforeEach void init() { } @Test void succeedingTest() { } @Test void failingTest() { fail("a failing test"); } @Test @Disabled("for demonstration purposes") void skippedTest(){ //not executed } @Test void abortedTest() { assumeTrue("abc".contains("Z")); fail("test should have been aborted"); } @AfterEach void tearDown() { } @AfterAll static void tearDownAll() { } }

      輸出結果

      例子:設定為測試通過

      import org.junit.jupiter.api.*; import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assumptions.*; class StandardTests { @BeforeAll static void initAll() { } @BeforeEach void init() { } @Test void succeedingTest() { } @Test void failingTest() { //fail("a failing test"); } @Test @Disabled("for demonstration purposes") void skippedTest(){ //not executed } @Test void abortedTest() { assumeTrue("abc".contains("c")); //fail("test should have been aborted"); } @AfterEach void tearDown() { } @AfterAll static void tearDownAll() { } }

      輸出結果

      Java junit

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Python官方文檔學習心得(第一章)
      下一篇:遠程醫療:科技抗疫,跨越時空鴻溝
      相關文章
      国产精品亚洲αv天堂无码| 亚洲精品A在线观看| 亚洲Av永久无码精品三区在线| 亚洲国产精品嫩草影院久久| 久久亚洲精品无码gv| 亚洲AV无码资源在线观看| 亚洲av成人片在线观看| 女bbbbxxxx另类亚洲| 国产成人精品亚洲| 亚洲av麻豆aⅴ无码电影| mm1313亚洲精品无码又大又粗| 国产精品亚洲五月天高清| 亚洲欧美日韩国产精品一区| 亚洲国产成人久久一区二区三区| 亚洲精品无码专区在线播放| 亚洲乱色伦图片区小说| 色综合久久精品亚洲国产| 色五月五月丁香亚洲综合网| 国产产在线精品亚洲AAVV| 亚洲福利在线播放| 国产亚洲精久久久久久无码AV| 伊人久久大香线蕉亚洲五月天| 亚洲国产精品VA在线观看麻豆| 亚洲AV无码乱码国产麻豆| 久久亚洲精精品中文字幕| 亚洲无线一二三四区| 亚洲人成7777| 亚洲av无码成人精品区一本二本| 午夜亚洲乱码伦小说区69堂| 亚洲天堂免费在线视频| 久久久无码精品亚洲日韩软件| 亚洲韩国精品无码一区二区三区| 亚洲AV无码不卡无码| 91久久亚洲国产成人精品性色 | 久久久久国产成人精品亚洲午夜 | 亚洲成综合人影院在院播放| 456亚洲人成在线播放网站| 亚洲AV性色在线观看| 中文字幕亚洲日韩无线码| 午夜亚洲AV日韩AV无码大全| 亚洲女人初试黑人巨高清|