做者:海向
来源: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 写了一段逻辑,同事直呼看不懂,你试试看。。
以为不错,别忘了随手点赞+转发哦!