参数解析程序冲突



我遇到了一个参数解析器冲突的问题。我得到的错误是ParameterResolutionException: Discovered multiple competing ParameterResolvers for parameter [the parameter]。这肯定是因为有一个基类扩展了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
}
}

我应该怎么做才能解决这个问题?有没有更好的方法来处理失败场景,同时仍然能够使用类中声明的字段?

编辑:更改测试名称

您遇到的问题是因为您自己的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;
}
}

这样,异常就不应该再发生了。

最新更新