JUnit5 枚举参数的参数化
- 使用枚举类作为测试数据。
- 枚举参数参数化注解 @EnumSource。
- 必须与 @ParameterizedTest 结合使用。
枚举参数化注解-简单使用
- 需要添加
@EnumSource
注解 - 测试方法传入枚举类作为参数
/** - @Author: 霍格沃兹测试开发学社
-
@Desc: ‘更多测试开发技术探讨,请访问:测试开发技术探讨’
*/
package com.hogwarts.JUnit5params;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
import java.util.EnumSet;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class EnumTest {
// 创建一个枚举类
public enum HogwartsUnit {
Harry(“Harry”, 18),
AD(“AD”, 19);
private final String name;
private final Integer age;
private HogwartsUnit(String name, Integer age){
this.name = name;
this.age = age;
}
}
// @ParameterizedTest 注解指明为参数化测试用例
@ParameterizedTest
// @EnumSource 注解表示使用枚举类型
@EnumSource
// 枚举类作为参数传入测试方法
void testWithEnumSourceInclude(HogwartsUnit unit) {
assertTrue(EnumSet.of(HogwartsUnit.Harry, HogwartsUnit.AD).contains(unit));
}
}
枚举参数化其他规则
- 通过 name 参数指定枚举值
/** - @Author: 霍格沃兹测试开发学社
-
@Desc: ‘更多测试开发技术探讨,请访问:测试开发技术探讨’
*/
package com.hogwarts.JUnit5params;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
import java.util.EnumSet;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class EnumTest {
// 创建一个枚举类
public enum HogwartsUnit {
Harry(“Harry”, 18),
AD(“AD”, 19);
private final String name;
private final Integer age;
private HogwartsUnit(String name, Integer age){
this.name = name;
this.age = age;
}
}
@ParameterizedTest
// @EnumSource 注解表示使用枚举类型,
// 通过 names 参数指定使用的枚举值
@EnumSource(names = {“Harry”})
// 枚举类作为参数传入测试方法
void testWithEnumSourceInclude(HogwartsUnit unit) {
assertTrue(EnumSet.of(HogwartsUnit.Harry, HogwartsUnit.AD).contains(unit));
}
}
枚举参数化注解示例
- mode 参数指定规则
- EXCLUDE 代表取反,即指定名称不等于的场景
- MATCH_ALL 代表通过正则进行匹配
/**
- @Author: 霍格沃兹测试开发学社
-
@Desc: ‘更多测试开发技术探讨,请访问:测试开发技术探讨’
*/
package com.hogwarts.JUnit5params;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
import java.util.EnumSet;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.params.provider.EnumSource.Mode.EXCLUDE;
import static org.junit.jupiter.params.provider.EnumSource.Mode.MATCH_ALL;
public class EnumTest {
// 创建一个枚举类
public enum HogwartsUnit {
Harry(“Harry”, 18),
AD(“AD”, 19);
private final String name;
private final Integer age;
private HogwartsUnit(String name, Integer age){
this.name = name;
this.age = age;
}
}
@ParameterizedTest
// @EnumSource 注解表示使用枚举类型,
// 通过 mode 参数指定规则
// mode 值为 EXCLUDE 代表取反,即指定名称不为Harry的枚举值
@EnumSource(mode = EXCLUDE, names = {“Harry”})
// 枚举类作为参数传入测试方法
void testWithEnumSourceExclude(HogwartsUnit unit) {
assertTrue(EnumSet.of(HogwartsUnit.Harry, HogwartsUnit.AD).contains(unit));
}
@ParameterizedTest
// @EnumSource 注解表示使用枚举类型,
// 通过 mode 参数指定规则
// mode 值为 EXCLUDE 代表取反,即指定名称不为Harry的枚举值
@EnumSource(mode = MATCH_ALL, names = {“.*ry”})
// 枚举类作为参数传入测试方法
void testWithEnumSourceRegex(HogwartsUnit unit) {
assertTrue(unit.name().endsWith(“ry”)); }
}
JUnit5 特殊参数的参数化
自动化测试过程中,需要验证某些特殊场景时,需要传空或者传null
- null 参数的参数化注解 @NullSource 注解
- 参数为空的参数化注解 @EmptySource 注解
- 需要 null 和空都进行参数化,使用 @NullAndEmptySource 注解
- 还有其他参数可以用@ValueSource继续提供
特殊的参数化示例
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EmptySource;
import org.junit.jupiter.params.provider.NullAndEmptySource;
import org.junit.jupiter.params.provider.NullSource;
import org.junit.jupiter.params.provider.ValueSource;
import static org.junit.jupiter.api.Assertions.*;
public class EmptyTest {
// @ParameterizedTest 注解指明为参数化测试用例
@ParameterizedTest
// @NullSource 注解表示使用null参数进行测试输入
@NullSource
void testNullSource(String param) {
// 断言入参为null
System.out.println(param);
assertNull(param);
}
@ParameterizedTest
// @NullSource 注解表示使用null参数进行测试输入
@EmptySource
void testEmptySource(String param) {
// 断言入参为null
assertTrue(param.isEmpty());
}
@ParameterizedTest
// @NullAndEmptySource 注解结合了 @EmptySource 与 @NullSource
@NullAndEmptySource
void testEmptyNullSource(String param) {
// 断言参数是空的
assertTrue(param == null || param.isEmpty());
}
@ParameterizedTest
// @NullAndEmptySource 注解结合了 @EmptySource 与 @NullSource
@NullAndEmptySource
// 如果还有其他参数可以用@ValueSource继续提供
@ValueSource(strings = {""})
void testEmptyNullAndValueSource(String param) {
// 断言参数是空的
assertTrue(param == null || param.isEmpty());
}
}