Java Junit5错误。必须为此@ParameteredTest至少提供一个参数

Java Junit5错误。必须为此@ParameteredTest至少提供一个参数,java,unit-testing,junit5,Java,Unit Testing,Junit5,我试图在JUnit5中开发一个参数化测试,如下例所示 @ParameterizedTest @ArgumentsSource(ArgClassProvider.class) void testAction_shouldSmth(ArgClass argClass) { //... } class ArgClassProvider implements ArgumentsProvider { @Override public Stream<? extends Ar

我试图在JUnit5中开发一个参数化测试,如下例所示

@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);
    }
}
@ParameterizedTest
@ArgumentsSource(ArgClassProvider.class)
无效测试操作\u应为SMTH(ArgClass ArgClass){
//...
}
类ArgClassProvider实现ArgumentsProvider{
@凌驾
公共图书馆
将
ArgClassProvider
设为静态类或顶级类

长版本 仔细查看错误消息:

java.lang.NoSuchMethodException:
com.ots.platform_sl.service.config.service.EarnMilesServiceTestHotels$ArgClassProvider.<init>()
java.lang.NoSuchMethodException:
com.ots.platform_sl.service.config.service.EarnMileServiceTestHotels$ArgClassProvider.()
这里您可以看到,Jupiter无法为
ArgClassProvider
找到无参数构造函数。原因是它是,这意味着它的隐式构造函数将外部类的实例(在本例中为
EarnMileServiceTestHotels
)作为参数

要提供
参数Provider
实现,您有两个选项:

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

不应该是
@ArgumentsSource(CategoriesProvider.class)
?是的,当然。这是问题文本中的一个错误。谢谢!
java.lang.NoSuchMethodException:
com.ots.platform_sl.service.config.service.EarnMilesServiceTestHotels$ArgClassProvider.<init>()