JUnit5 - 如何在AfterTestExecutionCallback中获取测试结果

bug*_*gs_ 6 java junit junit5 junit5-extension-model

我写了JUnit5 Extension.但我找不到如何获得测试结果的方法.

扩展看起来像这样:

import org.junit.jupiter.api.extension.AfterTestExecutionCallback;
import org.junit.jupiter.api.extension.TestExtensionContext;

public class TestResultExtension implements AfterTestExecutionCallback {
    @Override
    public void afterTestExecution(TestExtensionContext context) throws Exception {
        //How to get test result? SUCCESS/FAILED
    }
}
Run Code Online (Sandbox Code Playgroud)

任何提示如何获得测试结果?

小智 8

这对我来说工作:

public class RunnerExtension implements AfterTestExecutionCallback {

    @Override
    public void afterTestExecution(ExtensionContext context) throws Exception {
        Boolean testResult = context.getExecutionException().isPresent();
        System.out.println(testResult); //false - SUCCESS, true - FAILED
    }
}

@ExtendWith(RunnerExtension.class)
public abstract class Tests {

}
Run Code Online (Sandbox Code Playgroud)


Nic*_*lai 6

正如其他答案所指出的那样,JUnit会将失​​败的测试与异常进行通信,因此AfterTestExecutionCallback可以用来调查发生的事情.请注意,这很容易出错,因为稍后运行的扩展程序可能仍然无法通过测试

另一种方法是注册自定义TestExecutionListener.不过,这两种方法都有点迂回曲折.有一个问题跟踪特定的扩展点以对测试结果做出反应,这可能是您问题的最直接的答案.如果你能提供一个特定的用例,那么如果你可以转到#542并留下描述它的评论会很棒.