gpt4 book ai didi

java - Junit5 错误。您必须为此 @ParameterizedTest 提供至少一个参数

转载 作者:行者123 更新时间:2023-11-29 07:26:21 27 4
gpt4 key购买 nike

我正在尝试在 JUnit 5 中开发参数化测试,如下例所示。

@ParameterizedTest
@ArgumentsSource(ArgClassProvider.class)
void testAction_shouldSmth(ArgClass argClass) {
//...
}


class ArgClassProvider implements ArgumentsProvider {

@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext extensionContext) throws Exception {
return Stream.of(new ArgClass(), new ArgClass()).map(Arguments::of);
}
}

尝试运行测试导致异常:

java.lang.NoSuchMethodException: com.ots.platform_sl.service.config.service.EarnMilesServiceTestHotels$ArgClassProvider.<init>()
...
org.junit.platform.commons.util.PreconditionViolationException: Configuration error: You must provide at least one argument for this @ParameterizedTest
...

您必须为此@ParameterizedTest 提供至少一个参数

这条消息让我觉得我做错了什么,不是吗?

页。秒。我有一个假设,即只有原始类型的参数可用。

最佳答案

长话短说

ArgClassProvider 设为静态或顶级类。

长版

仔细查看错误信息:

java.lang.NoSuchMethodException:
com.ots.platform_sl.service.config.service.EarnMilesServiceTestHotels$ArgClassProvider.<init>()

在这里您可以看到,Jupiter 找不到ArgClassProvider 的无参数构造函数。原因是它是 a non-static inner class ,这意味着它的隐式构造函数将外部类(在本例中为 EarnMilesServiceTestHotels)的实例作为参数。

给你的 ArgumentsProvider 实现 the parameterless constructor it requires ,你有两个选择:

  • 让它成为一个合适的类
  • 使其成为static,这样它就不再引用外部类的实例并且隐式构造函数不带参数

关于java - Junit5 错误。您必须为此 @ParameterizedTest 提供至少一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52040757/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com