霍格沃兹测试开发学社
ceshiren.com
@EnumSource
注解/**
* @Author: 霍格沃兹测试开发学社
* @Desc: '更多测试开发技术探讨,请访问:https://ceshiren.com/t/topic/15860'
*/
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));
}
}
/**
* @Author: 霍格沃兹测试开发学社
* @Desc: '更多测试开发技术探讨,请访问:https://ceshiren.com/t/topic/15860'
*/
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));
}
}
/**
* @Author: 霍格沃兹测试开发学社
* @Desc: '更多测试开发技术探讨,请访问:https://ceshiren.com/t/topic/15860'
*/
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")); }
}
自动化测试过程中,需要验证某些特殊场景时,需要传空或者传null
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());
}
}