参数解析器冲突

Parameter Resolvers clashing

我 运行 遇到参数解析器冲突的问题。我得到的错误是 ParameterResolutionException: Discovered multiple competing ParameterResolvers for parameter [the parameter]。这肯定是因为有一个基础 class 扩展了 ParameterResolver 的实现,这样我就可以获取上下文来检查测试是否失败。

我的代码与此类似:

public class ExtensionContextResolver implements ParameterResolver {
    @Override
    public boolean supportsParameter(final ParameterContext parameterContext, final ExtensionContext extensionContext) throws ParameterResolutionException {
        return true;
    }

    @Override
    public Object resolveParameter(final ParameterContext parameterContext, final ExtensionContext extensionContext) throws ParameterResolutionException {
        return extensionContext;
    }
}

@ExtendsWith(ExtensionContextResolver.class)
public abstract class TestBase {
    private WebDriver driver;

    @AfterEach
    protected void afterEach(final ExtensionContext context) {
        // take screenshot using instance of driver in this class
}

public class MyTest extends TestBase {
    @ParameterizedTest
    @EnumSource(MyEnum.class)
    public void my_super_sweet_test(final MyEnum myEnum) {
        // the test
    }
}

我应该怎么做才能解决这个问题?有没有更好的方法来处理故障情况,同时仍然能够使用在 class?

中声明的字段

编辑:更改了测试名称

您 运行 遇到的问题之所以出现,是因为您自己的 ExtensionContextResolver 宣布要解析任何类型的对象 - 但实际上并没有。解决方法是在supportParameter:

中公布真实作用域
class ExtensionContextResolver implements ParameterResolver {
    @Override
    public boolean supportsParameter(final ParameterContext parameterContext, final ExtensionContext extensionContext) throws ParameterResolutionException {
        return parameterContext.getParameter().getType().equals(ExtensionContext.class);
    }

    @Override
    public Object resolveParameter(final ParameterContext parameterContext, final ExtensionContext extensionContext) throws ParameterResolutionException {
        return extensionContext;
    }
}

这样就不会再出现异常了。