JTest5
package com.limi.springboottest2;
import org.junit.jupiter.api.*;
import org.springframework.boot.test.context.SpringBootTest;
import java.time.Duration;
import java.util.Objects;
import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assumptions.*;
@SpringBootTest
public class JTest5 {
private final String environment = "DEV";
@Test
@DisplayName("simple")
public void simpleAssume() {
System.out.println(0);
assumeTrue(Objects.equals(this.environment, "DEV1"));
System.out.println(1);
assumeFalse(() -> Objects.equals(this.environment, "PROD"));
System.out.println(2);
}
@Test
@DisplayName("assume then do")
public void assumeThenDo() {
System.out.println(3);
assumingThat(
Objects.equals(this.environment, "DEV"),
() -> System.out.println("In DEV")
);
System.out.println(4);
}
}


我们对比一下断言
JTest5
@SpringBootTest
public class JTest5 {
@Test
public void simple() {
assertEquals(4, 1 + 2, "simple math");
System.out.println(1);
}
@Test
public void simple1() {
assertNotEquals(3, 1 + 1);
System.out.println(2);
}
}

package com.limi.springboottest2;
import org.junit.jupiter.api.*;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class TestDemo {
@BeforeEach
void test01() {
System.out.println("1层-1");
}
@Test
void test02() {
System.out.println("1层-2"); //外层类的测试方法不会触发内层类的@BeforeEach
}
@Nested
class A2 {
@BeforeEach
void test1() {
System.out.println("2层-1");
}
@Nested
class A3 {
@BeforeEach
void test2() {
System.out.println("3层-1");
}
@Test
void test21() {
System.out.println("3层-2"); //内层类的测试方法可以触发外层类的@BeforeEach
}
}
}
}
执行最外层类的测试方法est02

执行最内层内的测试方法test21

执行整个测试类

官方文档 - Parameterized Tests
参数化测试是JUnit5很重要的一个新特性,它使得用不同的参数多次运行测试成为了可能,也为我们的单元测试带来许多便利。
利用@ValueSource等注解,指定入参,我们将可以使用不同的参数进行多次单元测试,而不需要每新增一个参数就新增一个单元测试,省去了很多冗余代码。
利用@ValueSource等注解,指定入参,我们将可以使用不同的参数进行多次单元测试,而不需要每新增一个参数就新增一个单元测试,省去了很多冗余代码。
当然如果参数化测试仅仅只能做到指定普通的入参还达不到让我觉得惊艳的地步。让我真正感到他的强大之处的地方在于他可以支持外部的各类入参。如:CSV,YML,JSON 文件甚至方法的返回值也可以作为入参。只需要去实现ArgumentsProvider接口,任何外部文件都可以作为它的入参。
@ValueSource
public @interface ValueSource {
short[] shorts() default {};
byte[] bytes() default {};
int[] ints() default {};
long[] longs() default {};
float[] floats() default {};
double[] doubles() default {};
char[] chars() default {};
boolean[] booleans() default {};
String[] strings() default {};
Class<?>[] classes() default {};
}
可以看到@ValueSource传入的是数组类型
测试类TestDemo
package com.limi.springboottest2;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class TestDemo {
@ParameterizedTest
@ValueSource(strings = {"one", "two", "three"})
void test01(String str) {
System.out.println(str);
}
}
