Spring & JUnit 5 - 当@AfterAll 必须为静态时如何清除数据库

Posted

技术标签:

【中文标题】Spring & JUnit 5 - 当@AfterAll 必须为静态时如何清除数据库【英文标题】:Spring & JUnit 5 - How to clear database when @AfterAll must be static 【发布时间】:2020-01-04 20:28:11 【问题描述】:

@BeforeAll 和 @AfterAll 必须是静态的。所以我不能使用 JdbcTemplate。我应该如何清空数据库?

我现在已经用@PostConstruct 初始化了一个方法中的数据。但我找不到工作的对手。我曾考虑向@AfterEach 添加一个计数器并在最后一次执行时删除数据库。但这不是一个很好的解决方法。

【问题讨论】:

AfterClass 已经要求带注释的方法是静态的。那么有什么区别呢?此外,JUnit5 允许 AfterAll 方法不是静态的:junit.org/junit5/docs/current/user-guide/… 对不起我的错误!但是非常感谢您的解决方案。如果您将其放在答案中,我可以将其标记为解决方案。 【参考方案1】:

JUnit 4 中的@AfterClass 要求带注释的方法为static。所以没有区别:如果你可以在 JUnit 4 中使用 @AfterClass,你仍然可以在 JUnit Jupiter 中使用 @AfterAll

然而,区别在于 JUnit Jupiter允许 @AfterAll-注解的方法是静态的。请参阅the documentation 了解如何允许这样做。

【讨论】:

以上是关于Spring & JUnit 5 - 当@AfterAll 必须为静态时如何清除数据库的主要内容,如果未能解决你的问题,请参考以下文章

JUnit 4 & Spring Boot - 在测试前有选择地重新加载上下文/重新加载 Spring Security 配置

使用 JUnit 5 的 spring-boot-starter-test

Spring @DataJpaTest 与 JUnit 5

JUnit 5:将 spring 组件注入 Extension (BeforeAllCallback / AfterAllCallback)

将 JUnit JPA 测试从 Spring 2.5.5 迁移到 Spring 3.0.4

Gradle 5 JUnit BOM 和 Spring Boot 版本不正确