assertTrue与assertFalse⽤来判断条件是否为true或false
@Test
@DisplayName(\"测试断⾔equals\") void testEquals() { assertTrue(3 < 4); }
assertNull与assertNotNull⽤来判断条件是否为·null
@Test
@DisplayName(\"测试断⾔NotNull\") void testNotNull() {
assertNotNull(new Object()); }
assertThrows⽤来判断执⾏抛出的异常是否符合预期,并可以使⽤异常类型接收返回值进⾏其他操作
@Test
@DisplayName(\"测试断⾔抛异常\") void testThrows() {
ArithmeticException arithExcep = assertThrows(ArithmeticException.class, () -> { int m = 5/0; });
assertEquals(\"/ by zero\ }
assertTimeout⽤来判断执⾏过程是否超时
@Test
@DisplayName(\"测试断⾔超时\") void testTimeOut() {
String actualResult = assertTimeout(ofSeconds(2), () -> { Thread.sleep(1000); return \"a result\"; });
System.out.println(actualResult); }
assertAll是组合断⾔,当它内部所有断⾔正确执⾏完才算通过
@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); } }}
因篇幅问题不能全部显示,请点此查看更多更全内容