1

目前正在尝试 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 

如果存在注释,则不进行任何检查。

谁能指出我做错了什么?提前致谢

4

2 回答 2

1

我不知道 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;
        }
    }
}

(注意:未经测试,即使用于编译。)

编辑:


哦,我只注意到skip,而不是忽略失败。在这种情况下,您注释掉的代码之类的东西不起作用:

final Optional<Method> methodOptional = context.getTestMethod();
if (methodOptional.isPresent()
        && methodOptional.get().isAnnotationPresent(KnownIssue.class)) {
    // ...
}
于 2019-01-03T14:05:50.020 回答
0

工作解决方案:

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");
}

}

于 2019-01-03T14:26:50.897 回答