Java 在所有测试类中的所有测试终止后,在JUnit5中运行代码

Java 在所有测试类中的所有测试终止后,在JUnit5中运行代码,java,maven,junit5,Java,Maven,Junit5,对于测试证据,我希望将我写入特定目录的所有测试工件(如服务器调用和响应)归档。我得到了压缩目录的方法,但是我没有找到一个合适的地方来执行它 测试生命周期回调似乎不是正确的位置,因为@AfterAll是在每个测试类之后调用的,但是归档应该在所有测试类中的所有测试终止后生成 在阅读了类似这样的帖子之后,似乎很少有希望从junit内部执行调用 我发现了一个扩展TestLauncher,但是在阅读了稀少的文档之后,它似乎被用来从外部启动测试。特别是SummaryGeneratingListener听起来

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

测试生命周期回调似乎不是正确的位置,因为@AfterAll是在每个测试类之后调用的,但是归档应该在所有测试类中的所有测试终止后生成

在阅读了类似这样的帖子之后,似乎很少有希望从junit内部执行调用

我发现了一个扩展TestLauncher,但是在阅读了稀少的文档之后,它似乎被用来从外部启动测试。特别是SummaryGeneratingListener听起来对阅读后的扩展很有用,但是如果我把这段代码放在mavens src/test下的树中,我看不到如何只调用这个启动器,而不是所有的单个测试

由于代码最终将在maven构建中运行,而归档确实很重要,因此我认为可能有可能在目标测试之后运行它。但是我知道,如果测试目标中至少存在一定数量的错误,那么maven就会停止,并且下面的代码将不会执行。但在错误的情况下,证据才是最有用的

有人做过类似的尝试吗


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

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

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

  • 您可以实现一个扩展,该扩展使用whichare和which来处理这个问题。根据您的具体需要,您可能还需要在每次回调之前/之后实施

  • 另一个选择是使用 您可以使用
    testPlanExecutionStarted
    testPlanExecutionFinished
    来记录和获取所需的所有内容


我已经制作了一个演示JUnit Jupiter侦听器用法的示例。

如果您想知道为什么要归档所有工件,那会很有趣?您是否使用像Jenkins这样的ci解决方案?您在测试期间会产生什么样的工件?保存工件的主要原因是我使用junit执行的端到端测试的测试证据。越来越多的审核员要求证明一个程序已经过测试,以及如何测试。但也适用于业务,并作为开发和质量保证的文档。我尝试为每个测试编写一份可读的测试报告,该报告“自我记录”了测试。此外,我将请求和响应写在单独的文件中,这些文件链接在测试报告中。这提供了一个高级描述,您可以在其中深入到每个操作并重播。这提高了透明度,提供了实际的文档和简单的分析…嗨,卡尔,非常感谢你的超级酷的示例项目!我很容易感到羞耻,但这就是我要走的路。我想了很久,读了很久《追忆往事》,但有几个原因让我觉得太孤立了。最重要的是,必须有开关来打开和关闭报告:对于每日构建,默认情况下不需要它,只要它是绿色的,但当它变为红色时可能有用。通常,您可以使用ci记录/归档这些内容,并仅保留几天(取决于大小)…如果您的构建是红色的,则应该已经生成相应的报告。因此,在我看来,关闭/打开没有意义。我知道这些报告,我不得不忍受它们多年。在我看来,它们就像一个堆满了成千上万行被切碎的信息的垃圾场。如果我能够创建一个更具可读性的报告,如果您愿意,我会要求您挑战它。但我想感谢你们的投入,这真的很棒,精巧,非常好的搭配。。