【发布时间】:2021-10-04 06:19:55
【问题描述】:
我正在考虑通过创建扩展将旧的 junit4 扩展移植到 junit5。到目前为止,我失败的一个功能是使任何写入 System.out 或 System.err 的测试方法失败,并让失败点指向该特定测试。
我尝试将 TestExecutionListener#reportingEntryPublished 与 junit.jupiter.extensions.autodetection.enabled=true 一起使用,并且我使用了该方法,但是此时实际上将测试状态更改为 FAILED 为时已晚。或者我可以吗?
我开始使用 BeforeAllCallback 和 AfterAllCallback 并进行 out/err 重定向,并改为在字符串缓冲区上断言。我可能能够让它工作,但这似乎是我可能会在几年后搞砸并发现错误的事情:) 我们的 junit4 跑步者做了类似的事情,但它真的过于复杂了,我不希望任何人尝试维护类似的东西。
在junit5中有什么方法可以很好地做到这一点?
【问题讨论】:
-
看看github.com/stefanbirkner/system-lambda。如果您想自己重新实现其部分功能,请查看代码。
-
谢谢。这看起来具有相同类型的功能,但如果我正确阅读它,那么我必须将它添加到每个测试方法中。我希望它自动断言它运行的所有测试,而无需向 6000 多个测试用例中的每一个添加代码。或者我可以用系统 lambda 来完成这个吗?
-
您可以使用此处描述的全局扩展注册:junit.org/junit5/docs/current/user-guide/…
-
再次感谢您的回答。我在这里的吸收有点慢,你是说我应该创建一个调用 SystemLambda 上的方法的 BeforeEachCallback/AfterEachCallback 类吗?也就是说,我已经设法获得了自己的自动注册扩展,所以我已经有了,我只是还没弄清楚如何在其中使用 system-lambda。
-
我想我已经成功了,但很遗憾,我无法重用 system-lambda。如果我知道怎么做,我会接受你的回答:)
标签: junit5 junit5-extension-model