Столкновение резольверов параметров - PullRequest
0 голосов
/ 20 марта 2020

Я столкнулся с проблемой конфликтующих преобразователей параметров. Я получаю ошибку 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
    }
}

Что я должен сделать, чтобы обойти эту проблему? Есть ли лучший способ обработки сценария сбоев ios при возможности использования поля, объявленного в классе?

Редактировать: измененное имя теста

1 Ответ

1 голос
/ 21 марта 2020

Проблема, с которой вы сталкиваетесь, возникает потому, что ваша собственная 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;
    }
}

Таким образом, исключение больше не должно возникать.

...