使用 DirtiesContext 注释重新加载 Spring 应用程序不适用于嵌套类
Posted
技术标签:
【中文标题】使用 DirtiesContext 注释重新加载 Spring 应用程序不适用于嵌套类【英文标题】:Reload Spring application using DirtiesContext annotation doesn't work with nested classes 【发布时间】:2020-07-31 16:10:44 【问题描述】:每次测试后我无法将我的 Spring 应用程序重新加载到我的嵌套类中:
/*...*/
@DirtiesContext( classMode = AFTER_EACH_TEST_METHOD )
public class MyTestClass
@Nested
class MyNestedClass_1
@Test
void test_1()
/*...*/
@Test
void test_2()
/*...*/
@Nested
class MyNestedClass_2
/*..*/
然而,它在没有嵌套类的情况下工作得很好:
/*...*/
@DirtiesContext( classMode = AFTER_EACH_TEST_METHOD )
public class MyTestClass
@Test
void test_1()
/*...*/
@Test
void test_2()
/*...*/
有人知道为什么它不起作用吗?
【问题讨论】:
Spring(启动)测试并不真正适用于嵌套测试类。该框架不是为此而设计的。 【参考方案1】:Spring 对 JUnit 5 的 @Nested
类功能的支持目前是有限的。您可以在GitHub 上按照进度解决此问题。暂时,我猜你必须删除嵌套类并密切关注进度。
您还可以通过在嵌套类顶部添加@DirtiesContext( classMode = AFTER_EACH_TEST_METHOD )
在此question 找到可能的解决方法:
@DirtiesContext( classMode = AFTER_EACH_TEST_METHOD )
public class MyTestClass
@Nested
@SpringBootTest
@DirtiesContext( classMode = AFTER_EACH_TEST_METHOD )
class MyNestedClass_1
@Test
void test_1()
/*...*/
@Test
void test_2()
/*...*/
@Nested
@SpringBootTest
@DirtiesContext( classMode = AFTER_EACH_TEST_METHOD )
class MyNestedClass_2
/*..*/
【讨论】:
以上是关于使用 DirtiesContext 注释重新加载 Spring 应用程序不适用于嵌套类的主要内容,如果未能解决你的问题,请参考以下文章
Spring:表已经存在错误! @DirtiesContext 和 EmbeddedDatabaseBuilder 不能一起工作吗?