← 中文资源

简体中文版本

用方法源参数化 JUnit 5 测试

从方法源或 CSV 驱动 JUnit 5 参数化测试,让边界用例保持显式且可增量添加,而无需新增方法。

阅读英文原文

目标

校验函数有十几个只差输入与期望的测试方法,重复且难维护。本配方用 @MethodSource 或 @CsvSource 把用例以数据形式提供,一个测试方法覆盖全部用例,失败时能指出具体输入;同时提醒参数顺序错误会掩盖失败,需为用例命名。

步骤要点

  1. 用 @MethodSource 提供输入与期望。
  2. 用例表格化时改用 @CsvSource。
  3. 为用例命名或拆分源以便定位失败。
  4. 新增用例只需改一行数据。
@ParameterizedTest
@MethodSource("cases")
void validates(String input, boolean expected) {
    assertEquals(expected, Validator.isValid(input));
}
static Stream<Arguments> cases() {
    return Stream.of(
        Arguments.of("ok", true),
        Arguments.of("", false),
        Arguments.of("bad!", false));
}

排错提示

  • 失败输出若不含输入会难定位。
  • 测试未被发现通常是缺少依赖或源方法非 static。
  • 参数顺序错误会掩盖问题。

适用边界

  • 不适用于各用例初始化差异很大的场景。
  • 需要可读的用例命名。