jck-lucio-junit5参数化用例(二)

JUnit5 @MethodSource 参数化

  • 通过@MethodSource注解引用方法作为参数化的数据源信息
  • @MethodSource 注解的参数必须是静态的工厂方法,除非测试类被注释为@TestInstance(Lifecycle.PER_CLASS)
  • 静态工厂方法的返回值需要和测试方法的参数对应
  • 如果在 @MethodSource 注解中未指明方法名,会自动调用与测试方法同名的静态方法

测试方法参数对应的工厂方法返回值

image

单参数 @MethodSource 参数化

  1. thodSource() 传入方法名称
  2. @MethodSource 不传入方法名称,找同名的方法
  • 代码实例

/**

  • @Author: 霍格沃兹测试开发学社

public class MethodSourceTest {

// @ParameterizedTest 注解指明为参数化测试用例
@ParameterizedTest
// 第一种在 @MethodSource 中指定方法名称
@MethodSource("stringProvider")
void testWithLocalMethod(String argument) {
    assertNotNull(argument);
}

static Stream<String> stringProvider() {
    // 返回字符串流
    return Stream.of("apple", "pear");
}

// @ParameterizedTest 注解指明为参数化测试用例
@ParameterizedTest
// 第二种在 @MethodSource 不指明方法名,框架会找同名的无参数方法
@MethodSource
void testWithRangeMethodSource(Integer argument) {
    assertNotEquals(9, argument);
}

static IntStream testWithRangeMethodSource() {
    //int类型的数字流
    return IntStream.of(1,2,3);
}

}

多参数 @MethodSource 参数化

// @ParameterizedTest 注解指明为参数化测试用例
@ParameterizedTest
// @MethodSource 不指明方法名,框架会找同名的无参数方法
@MethodSource
// 多个参数和种类, 包含字符串、整型
void testWithMultiArgsMethodSource(String str, int num) {
    assertEquals(5, str.length());
    assertTrue(num >= 2 && num <= 3);
}
static Stream<Arguments> testWithMultiArgsMethodSource() {
    // 返回 arguments(Object…)
    return Stream.of(
            arguments("apple", 2),
            arguments("pears", 3)
    );
}

}