JUnit 5. 如何在没有扩展的情况下在所有测试之前/之后编写 运行 代码
JUnit 5. How to run code before / after all tests without extension
在所有测试之前,需要将数据插入数据库。
所有测试完成后,需要从数据库中删除所有数据。
在 TestNG 中,可以使用 @BeforeSuite 和 @AfterSuite 来做这些事情。
如何在 JUnit 5 中做这些事情?
在 Junit 5 中,@BeforeAll 注释在 class.
中的所有测试之前将方法标记为 运行
@AfterAll 注释在 class.
中的所有测试之后将方法标记为 运行
我在 Whosebug 上找到了以下解决方案:
但是:
- 它仅适用于所有测试之前,不适用于所有测试之后
- 需要用这个扩展来注释每个测试 class。那不好。在我的项目中,所有测试 class 都扩展了一些基础测试 class。那么,为什么不在一个地方做这些事情呢?
也许是后来添加的,但您引用的答案实际上包括在所有 class 的所有测试都已完成后通过使用 CloseableResource
指向 运行 代码的挂钩。这正是您要找的。
并且您还可以使用扩展名注释您的超级 class,因为 @ExtendWith
是继承的。如果您使用自定义元注释,您也必须将其注释为 @Inherited
。这样,您就可以一个地方搞定。
顺便说一句:不是继承普通超级 classes 而是到处使用扩展通常更容易。
在所有测试之前,需要将数据插入数据库。
所有测试完成后,需要从数据库中删除所有数据。
在 TestNG 中,可以使用 @BeforeSuite 和 @AfterSuite 来做这些事情。
如何在 JUnit 5 中做这些事情?
在 Junit 5 中,@BeforeAll 注释在 class.
中的所有测试之前将方法标记为 运行
@AfterAll 注释在 class.
我在 Whosebug 上找到了以下解决方案:
但是:
- 它仅适用于所有测试之前,不适用于所有测试之后
- 需要用这个扩展来注释每个测试 class。那不好。在我的项目中,所有测试 class 都扩展了一些基础测试 class。那么,为什么不在一个地方做这些事情呢?
也许是后来添加的,但您引用的答案实际上包括在所有 class 的所有测试都已完成后通过使用 CloseableResource
指向 运行 代码的挂钩。这正是您要找的。
并且您还可以使用扩展名注释您的超级 class,因为 @ExtendWith
是继承的。如果您使用自定义元注释,您也必须将其注释为 @Inherited
。这样,您就可以一个地方搞定。
顺便说一句:不是继承普通超级 classes 而是到处使用扩展通常更容易。