一、Junit 5 的依赖
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>1.8.2</version>
<scope>test</scope>
</dependency>
二、Junit - 注解
@Test
@BeforeEach
该注解是修饰方法的, 当一个测试方法加上 @BeforeEach 注解之后, 就表示当前方法需要在每个测试用例执行之前都执行一次. (注意加上 @BeforeEach 注解之后, 就不要加 @Test 注解了)
@BeforeAll
该注解是修饰方法的, 当一个测试方法加上 @BeforeAll 注解之后, 就表示当前方法需要在当前类下所有测试用例执行之前执行一次. 并且被该注解修饰的方法必须为静态方法.
在测试项目的时候, 可以把创建驱动对象单独写一个方法, 使用 @BeforeAll 注解修饰.
@AfterEach
该注解是修饰方法的, 当一个测试方法加上 @AfterEach 注解之后, 就表示当前方法需要在每个测试用例执行之后都执行一次.
@AfterAll
该注解是修饰方法的, 当一个测试方法加上 @AfterAll 注解之后, 就表示当前方法需要在当前类下所有测试用例执行之后执行一次. 并且被该注解修饰的方法必须为静态方法.
在测试项目的时候, 可以把释放驱动对象单独写一个方法, 使用 @AfterAll 注解修饰.
三、Junit - 断言
Assertions.assertEquals("判断", text)
Assertions.assertNotEquals("判断", text)
Assertions.assertTrue(1 == 1)
Assertions.assertFalse(1 == 0)
Assertions.assertNull(res)
四、Junit - 测试用例的执行顺序
Order指定顺序,从小到大
@Test
@Order(2)
void indexTest() {
System.out.println("indexTest");
}
五、Junit - 参数化
使用了参数化注解的方法不能再用 @Test 注解. (@Test 只能作用在非参数化的用例上)
单参数数据来源
@ValueSource(数据类型方法 = {参数1, 参数2, 参数3 .....})
@ParameterizedTest
@ValueSource(strings = {"张三", "李四", "王五"})
void singleParamTest(String name) {
System.out.println(name);
}
多参数数据来源
@CsvSource({"第一组数据", "第二组数据", "第三组数据", ....})
@ParameterizedTest
@CsvSource({"张三, 123","李四, 123", "王五, 123"})
void muchParamTest(String name, int age) {
System.out.println("name: " + name + ", age : " + age);
}
第三方 csv 文件读取数据源
@CsvFileSource(files = "文件路径")
@ParameterizedTest
@CsvFileSource(files = "D:\\aa\\abc.csv")
void csvFileParamTest(String name, int age) {
System.out.println("name: " + name + ", age : " + age);
}
动态方法提供数据源
@ParameterizedTest
@MethodSource("methodParams")
void dynamicMethodParamTest(String name, int age) {
System.out.println("name : " + name + ",age : " + age);
}
static Stream<Arguments> methodParams() throws InterruptedException {
// 构造动态参数
String[] array = new String[5];
for(int i = 0; i < array.length; ++i) {
Thread.sleep(500);
array[i] = String.valueOf(System.currentTimeMillis());
}
return Stream.of(
Arguments.arguments(array[0], 21),
Arguments.arguments(array[1], 22),
Arguments.arguments(array[2], 23),
Arguments.arguments(array[3], 24),
Arguments.arguments(array[4], 25)
);
}
六、JUnit - 测试套件
创建 runSuite 测试套件类, 添加@Suite注解, @SelectClasses 注解, 指定类运行类下的加了 @Test 注解, 或者参数化的测试用例.
@Suite
@SelectClasses({aaa.class,ccc.class})
public class runSuite {
}
指定包名来运行包下所有的用例
如果使用包名来指定运行的范围, 那么该包下所有测试类的命名必须要以 Test/Tests 结尾 (T 必须要大写)
@Suite
@SelectPackages("com.autoTest5")
public class runSuite {
}