org.junit.jupiter.api.extension.ParameterResolutionException:构造函数中没有为参数 [int arg0] 注册 ParameterResolver

问题描述 投票:0回答:1

我正在将测试从 Junit4 迁移到 Junit5,其中一个是基本测试类,已被其他 29 个带有构造函数的类继承。

我改用Junit5,结构如下:

public class BaseTest {
    protected String field1;
    protected Integer field2;

    public BaseTest(String field1, Integer field2) {
        this.field1 = field1;
        this.field2 = field2;
    }
}


public class ChildTest extends BaseTest {
    public ChildTest(String field1) {
        super(field1, null);
    }

    private static Stream<Arguments> data() {
        return Stream.of(Arguments.of("string1"));
    }

    @ParameterizedTest
    @MethodSource("data")
    public void test1() {
        assertNull(this.field2);
    }
}

但是现在,它抛出了

org.junit.jupiter.api.extension.ParameterResolutionException: No ParameterResolver registered for parameter [java.lang.String arg0] in constructor [public junit5.ChildTest(java.lang.String)].

我看到其他答案并不真正适用于此,任何人都可以分享任何想法吗?

我看到了这个:Junit 5 - 没有为参数注册 ParameterResolver

  1. 我只使用一个注释:
    @ParameterizedTest
    已经;
  2. 我尝试使用带有 @BeforeEach 注释的 setup() ,但不知何故 Junit5 不允许我将参数传递给它......

谢谢!

java spring-boot unit-testing junit5 junit-jupiter
1个回答
0
投票

在 JUnit 5 中,带参数的内置测试(例如通过

@ParameterizedTest
注释)不会传播到测试类构造函数的参数。对于参数化构造函数,您需要注册一个特殊的 ParameterResolver 来告诉框架如何将参数传递给构造函数。

© www.soinside.com 2019 - 2024. All rights reserved.