使用 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 不能一起工作吗?

如何使用 Spring 重新加载属性?

在 UIView 中重新加载 JSON 提要

防止页面重新加载表单按钮点击流星?

如何使用新数据重新加载或刷新选项卡栏控制器的选项卡栏中的数据?

在 iPhone 中,我如何知道在使用正向地理编码时我的所有地图注释何时加载?