Junit 5 指定数据驱动时参数化的测试用例名称

如何自定义设置Junit 5 参数化的测试用例名称

使用字符串加Junit自带的参数

@ParameterizedTest(name = “{index}: {0}”)
@ParameterizedTest(name = “test case number is {index}”)

使用@method 封装Arguments(Name)

查看StackOverflow 以及 Junit 5 官网发现Junit 5.8 有Named 接口,提供自定义参数名称
https://stackoverflow.com/questions/57892989/generating-display-names-for-parameterizedtest-in-junit-5

https://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests-display-names

@DisplayName("A parameterized test with named arguments")
@ParameterizedTest(name = "{index}: {0}")
@MethodSource("namedArguments")
void testWithNamedArguments(File file) {
}

static Stream<Arguments> namedArguments() {
    return Stream.of(
        arguments(named("An important file", new File("path1"))),
        arguments(named("Another file", new File("path2")))
    );
}
    protected static Stream<Arguments> queryBusinessByKeywords() {
        List<TestCase> params = XmlUtils.getXmlRecords(queryABC).stream().filter(param -> (param.getKeywords()!=null && param.getKeywords().length() > 0)).collect(Collectors.toList());
        return IntStream.range(0, params.size())
                .mapToObj(index -> arguments(named(params.get(index).getName(),params.get(index)), index));
    }

遇到问题 当使用@ParameterizedTest()时,测试用例名会有自带的pattern, "payload = "

查看了Junit 代码,发现ARGUMENTS_PLACEHOLDER 对应的argumentsPattern 可以去除固定的pattern “payload =”

	private String prepareMessageFormatPattern(int invocationIndex, Object[] arguments) {
		String result = pattern//
				.replace(DISPLAY_NAME_PLACEHOLDER, this.displayName)//
				.replace(INDEX_PLACEHOLDER, String.valueOf(invocationIndex));

		if (result.contains(ARGUMENTS_WITH_NAMES_PLACEHOLDER)) {
			result = result.replace(ARGUMENTS_WITH_NAMES_PLACEHOLDER, argumentsWithNamesPattern(arguments));
		}

		if (result.contains(ARGUMENTS_PLACEHOLDER)) {
			result = result.replace(ARGUMENTS_PLACEHOLDER, argumentsPattern(arguments));
		}

		return result;
	}
	
	private String argumentsWithNamesPattern(Object[] arguments) {
		return IntStream.range(0, arguments.length) //
				.mapToObj(index -> methodContext.getParameterName(index).map(name -> name + "=").orElse("") + "{"
						+ index + "}") //
				.collect(joining(", "));
	}

	private String argumentsPattern(Object[] arguments) {
		return IntStream.range(0, arguments.length) //
				.mapToObj(index -> "{" + index + "}") //
				.collect(joining(", "));
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值