如何解决在 HierarchicalTestEngine 中更改容器 TestExecutionResult
注意:如果你从未见过测试引擎,一开始你可能会很困惑(至少对我来说是这样)。有一个例子 here。
在 junit5 中,可以创建一个自定义的 TestEngine
来发现和执行测试(不仅仅是标准的 @Test
注释方法)。此扩展的文档是 here,但 this post 肯定更详尽。关于这个高级主题的资源和演示很少,所以我尝试了一些实验。据我了解,基本上有两种方法:
我会说第二个是最干净的,即使我不确定你在执行阶段是否有同样的自由。
在第一种方法中,为测试容器设置 TestExecutionResult
非常简单
public void execute(ExecutionRequest request) {
TestDescriptor rootDescriptor = request.getRoottestDescriptor();
var listener = request.getEngineExecutionListener();
...
listener.executionFinished(containerDescriptor,TestExecutionResult.successful());
}
在这种情况下,整个代码并不重要,containerDescriptor
是一个 TestDescriptor
,其 getType()
返回 Type.CONTAINER
。在实际代码中,我根据容器包含的测试结果设置了 TestExecutionResult
。
第二种方法如何设置容器的测试执行结果?毕竟实际只执行了TestDescriptor
和getType() == Type.Test
,所以我可以轻松操作结果(覆盖 Node.execute
方法)。我查看了 Node
界面,看看是否有一些有用的东西,但我错过了。甚至 nodeFinished
都不够,因为我只收到容器的 TestDescriptor
,而不是所有孩子的测试执行结果。
目前,这是我的描述符的定义:
public class MyTestClassDescriptor extends AbstractTestDescriptor
implements Node<MyEngineExecutionContext> {
public MyTestClassDescriptor(Class<?> testClass,TestDescriptor parent) {
super(...);
...
}
@Override
public Type getType() {
return Type.CONTAINER;
}
}
我当然可以调整 MyEngineExecutionContext
来存储一种包含所有结果的地图,但这似乎是在重新发明轮子。
额外问题:容器的 TestExecutionResult
何时有意义?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。