做者:海向
來源:www.cnblogs.com/haixiang/p/13812363.htmlhtml
如圖,JUnit5結構以下:java
咱們以SpringBoot2.3.1
爲例,引入以下依賴,防止使用舊的junit4相關接口咱們將其依賴排除。spring
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency>
JUnit Jupiter提供了強大的斷言方法用以驗證結果,在使用時須要藉助java8的新特性lambda表達式,均是來自org.junit.jupiter.api.Assertions
包的static
方法。數據庫
assertTrue`與`assertFalse`用來判斷條件是否爲`true`或`false @Test @DisplayName("測試斷言equals") void testEquals() { assertTrue(3 < 4); }
assertNull與
assertNotNull用來判斷條件是否爲·
nullapi
@Test @DisplayName("測試斷言NotNull") void testNotNull() { assertNotNull(new Object()); }
assertThrows
用來判斷執行拋出的異常是否符合預期,並可使用異常類型接收返回值進行其餘操做intellij-idea
@Test @DisplayName("測試斷言拋異常") void testThrows() { ArithmeticException arithExcep = assertThrows(ArithmeticException.class, () -> { int m = 5/0; }); assertEquals("/ by zero", arithExcep.getMessage()); }
assertTimeout
用來判斷執行過程是否超時ide
@Test @DisplayName("測試斷言超時") void testTimeOut() { String actualResult = assertTimeout(ofSeconds(2), () -> { Thread.sleep(1000); return "a result"; }); System.out.println(actualResult); }
assertAll
是組合斷言,當它內部全部斷言正確執行完纔算經過spring-boot
@Test @DisplayName("測試組合斷言") void testAll() { assertAll("測試item商品下單", () -> { //模擬用戶餘額扣減 assertTrue(1 < 2, "餘額不足"); }, () -> { //模擬item數據庫扣減庫存 assertTrue(3 < 4); }, () -> { //模擬交易流水落庫 assertNotNull(new Object()); } ); }
在許多場景中咱們須要對同一個接口方法進行重複測試,例如對冪等性接口的測試。性能
JUnit Jupiter經過使用@RepeatedTest(n)
指定須要重複的次數單元測試
@RepeatedTest(3) @DisplayName("重複測試") void repeatedTest() { System.out.println("調用"); }
參數化測試能夠按照多個參數分別運行屢次單元測試這裏有點相似於重複性測試,只不過每次運行傳入的參數不用。須要使用到@ParameterizedTest
,同時也須要@ValueSource
提供一組數據,它支持八種基本類型以及String
和自定義對象類型,使用極其方便。
@ParameterizedTest @ValueSource(ints = {1, 2, 3}) @DisplayName("參數化測試") void paramTest(int a) { assertTrue(a > 0 && a < 4); }
JUnit5提供了嵌套單元測試的功能,能夠更好展現測試類之間的業務邏輯關係,咱們一般是一個業務對應一個測試類,有業務關係的類其實能夠寫在一塊兒。這樣有利於進行測試。並且內聯的寫法能夠大大減小沒必要要的類,精簡項目,防止類爆炸等一系列問題。
@SpringBootTest @AutoConfigureMockMvc @DisplayName("Junit5單元測試") public class MockTest { //.... @Nested @DisplayName("內嵌訂單測試") class OrderTestClas { @Test @DisplayName("取消訂單") void cancelOrder() { int status = -1; System.out.println("取消訂單成功,訂單狀態爲:"+status); } } }
近期熱文推薦:
1.Java 15 正式發佈, 14 個新特性,刷新你的認知!!
2.終於靠開源項目弄到 IntelliJ IDEA 激活碼了,真香!
3.我用 Java 8 寫了一段邏輯,同事直呼看不懂,你試試看。。
以爲不錯,別忘了隨手點贊+轉發哦!