运行 所有测试 类 中的所有测试终止后 junit 5 中的代码

Run code in junit 5 after all tests in all test classes terminated

为了测试证据,我想将我写入特定目录的所有测试工件(例如服务器调用和响应)存档。我得到了压缩目录的方法,但是我没有找到合适的地方来执行它。

测试生命周期回调似乎不是正确的地方,因为 @AfterAll 在每次测试后被调用 class,但存档应该在所有测试中的所有测试后生成 class es 终止。

阅读 How to code once before and once after all junit5 tests have executed in a module? 之类的帖子后,似乎希望从 junit 中执行调用。

我找到了一个扩展 TestLauncher,但在阅读了稀缺的文档之后,它似乎被用来从外部启动测试。尤其是 SummaryGeneratingListener 听起来对阅读 https://www.codota.com/web/assistant/code/rs/5c7c89fd2f7dae0001637b13#L33 后的扩展很有用,但是如果我把这段代码放在树中的专家 src/test 下,我看不出如何只调用这个启动器而不是所有的单个测试...

由于代码最终将 运行 在存档真正重要的 Maven 构建中,我认为也许有可能在目标测试后 运行 它。但我知道如果测试目标中至少存在一定数量的错误,maven 就会停止,然后将不会执行以下代码。但这是证据最有用的错误情况。

有人试过类似的东西吗?

感谢分享想法、想法和经验

一般来说,这个问题有几种解决方法。

  • 您可以在父 class 上定义 beforeAll/afterAll,您的所有测试都从该父 class 继承。另一种选择是尝试在接口上定义 beforeAll/afterAll (我不是 100% 确定这是否有效;我会说应该如此)。在 beforeAll 中,您可以初始化设置,在 afterEachCallBack 中,您可以收集单个测试所需的所有数据。所以每次测试后都会调用它。

  • 您可以实现一个使用 callbacks of JUnit which are BeforeAllCallback and AfterAllCallBack 的扩展来处理这个问题。根据您的确切需要,您可能还需要实施 beforeEachCallBack/afterEachCallBack。

  • 另一种选择是使用 Test Execution listener 您可以在其中使用 testPlanExecutionStartedtestPlanExecutionFinished 来记录并获得所需的一切。

我制作了一个 example project 来展示 JUnit Jupiter 侦听器的用法。