为了账号安全,请及时绑定邮箱和手机立即绑定

如果使用 Spring 和 Junit 4,如何编写内部测试类?或者我还能如何构建我的测试?

如果使用 Spring 和 Junit 4,如何编写内部测试类?或者我还能如何构建我的测试?

幕布斯6054654 2023-04-26 15:56:56
我有一个测试类,将来会测试不同的测试条件,我想让它更有条理并且只适合一个文件。我找到了这个解决方案,但它不适合我,因为我无法将 aSpringRunner.class和Enclosed.class组合成一个@RunWith。我不能使用Nitor Creation's Nested Runner- 它带来了同样的问题。我用Spring 5和Junit 4.12。好吧......我的问题是,如何将我的测试结合在几个内部/嵌套类中与一个根类中?UPD:一句话 - 我无法升级到Junit 5.
查看完整描述

1 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

JUnit 4

如果您需要坚持使用 JUnit 4,可以使用第三方插件来提供支持。

将依赖项添加到您的项目中,并HeirachalContextRunner像这样使用:


@RunWith(HierarchicalContextRunner.class)

public class NestedTest {


    @ClassRule

    public static final SpringClassRule SPRING_CLASS_RULE = new SpringClassRule();


    @Rule

    public final SpringMethodRule  springMethodRule = new SpringMethodRule();


    @Before

    public void setup() {

        // General test-suite setup

    }


    public class NestedClass {


        @Test

        public void testSomething() {

            // Test

        }


        public class AnotherNestedClass {


            @Test

            public void testSomethingElse() {

                // Test

            }

        }

    }

}

请注意,我们不需要在这里指定 Spring 的运行器。相反,我们使用规则来应用 Spring 测试框架,从Spring 4.2.


JUnit 5


可以说,一个更具前瞻性的解决方案是升级到JUnit 5. 然后您可以使用注释直接构建测试用例@Nested。见下文:


@SpringBootTest

@ExtendWith(SpringExtension.class)

class MyNestedTest {


    @BeforeAll

    void setup() {

        // General test-suite setup

    }


    @Nested

    @DisplayName("parentTestSuite")

    class NestedClass {


        @Test

        void testSomething() {

            // Test

        }


        @Nested

        @DisplayName("childTestSuite")

        class AnotherNestedClass {


            @Test

            void testSomethingElse() {

                // Test

            }


        }

    }

}

请注意,@RunWith已替换为@ExtendWithin JUnit 5。如果您选择迁移到 JUnit 5,您可能会发现阅读Baeldung 的 JUnit 5 迁移指南很有用。



查看完整回答
反对 回复 2023-04-26
  • 1 回答
  • 0 关注
  • 302 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信