Как бороться с ExecutionCondition, если я хочу отключить тест, если под тестовым методом присутствует некоторая аннотация? - PullRequest
0 голосов
/ 03 января 2019

В настоящее время пробую JUnit 5 и хочу внедрить в мою инфраструктуру автоматизации возможность пропустить тесты, если моя пользовательская аннотация присутствует.

Если я пытаюсь сделать так:

public class KnownIssueExtension implements ExecutionCondition {


    @Override
    public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
    if(context.getRequiredTestMethod().isAnnotationPresent(KnownIssue.class)){
        return disabled("HERE DISABLED");
//        if(context.getTestMethod().isPresent(element -> findAnnotation(element, KnownIssue.class))){
     } else return enabled("enabled");
    }
}

я получаю такое исключение:

org.junit.jupiter.engine.execution.ConditionEvaluationException: Failed to evaluate condition [org.talend.qa.iam.utils.KnownIssueExtension]: Illegal state: required test method is not present in the current ExtensionContext

Но другой метод, например:

context.getTestMethod 

не проверяет наличие аннотации.

Может ли кто-нибудь указать мне, что я делаю неправильно? Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Рабочий раствор:

public class KnownIssueExtension implements ExecutionCondition {

@Override
public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {

    final Optional<Method> methodOptional = context.getTestMethod();
    if (methodOptional.isPresent()
            && methodOptional.get().isAnnotationPresent(KnownIssue.class)) {
        return disabled("DISABLED");
    }
    return enabled("ENABLED");
}

}

0 голосов
/ 03 января 2019

Я не знаю, изменились ли API с тех пор, но я хотел сделать нечто подобное при первоначальном тестировании JUnit 5. (См. здесь .)

Извините за простой дамп кода, но это кажется достаточно простым, что, вероятно, говорит само за себя:

public final class KnownIssueExtension implements TestExecutionExceptionHandler {

    @Override
    public void handleTestExecutionException(final TestExtensionContext context,
                                             final Throwable throwable) 
            throws Exception {

        final Method testMethod = context.getTestMethod().get();
        if (!testMethod.isAnnotationPresent(KnownIssue.class)) {
            throw throwable;
        }
    }
}

(Примечание: не проверено, даже для компиляции.)

Edit:


О, я только что заметил Пропустить , а не игнорировать сбой. В этом случае что-то вроде вашего закомментированного кода не работает:

final Optional<Method> methodOptional = context.getTestMethod();
if (methodOptional.isPresent()
        && methodOptional.get().isAnnotationPresent(KnownIssue.class)) {
    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...