当前位置: 首页 > 知识库问答 >
问题:

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

邹斌
2023-03-14

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

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

在阅读了诸如如何在模块中执行之前和之后分别编码一次的帖子之后?似乎没有希望在jUnit中执行调用。

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

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

有人尝试过类似的东西吗?

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

共有1个答案

毋宪
2023-03-14

通常,该问题有几种解决方案。

> < li>

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

您可以实现一个扩展,它使用JUnit的回调,即BeforeAllCallback和AfterAllCallBack,它们可以处理这个问题。根据您的具体需要,您可能还需要在每次回调之前/之后实施。

另一种选择是使用测试执行侦听器,您可以在其中使用testPlanExecutionStartedtestPlanExecutionFinated,您应该实现它们来记录和获取所需的所有内容。

我做了一个示例项目,展示了JUnit Jupiter监听器的用法。

 类似资料: