JUnit:@Before 仅用于某些测试方法?

新手上路,请多包涵

我有一些常见的设置代码,我已经分解为标记为 @Before 的方法。但是,没有必要为每个测试运行所有这些代码。有没有办法标记它,以便 @Before 方法仅在某些测试之前运行?

原文由 Nick Heiner 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 858
2 个回答

只需将不需要设置代码的测试移出到单独的测试类中即可。如果您有一些其他有助于保留的测试通用代码,请将其移出到辅助类中。

原文由 Kirschstein 发布,翻译遵循 CC BY-SA 2.5 许可协议

@Nested + @BeforeEach

完全同意将相关代码移至内部类的观点。所以在这里我做了什么。

  1. 在测试类中创建一个内部类
  2. 用@Nested 注释内部类
  3. 在内部类中移动所有要使用的测试方法
  4. 将初始化代码写在内部类里面,并用@ForEach注解

这是代码:

 class Testing {

    @Test
    public void testextmethod1() {

      System.out.println("test ext method 1");

    }

    @Nested
    class TestNest{

       @BeforeEach
       public void init() {
          System.out.println("Init");
       }

       @Test
       public void testmethod1() {
          System.out.println("This is method 1");
       }

       @Test
       public void testmethod2() {
          System.out.println("This is method 2");
       }

       @Test
       public void testmethod3() {
          System.out.println("This is method 3");
       }

     }

     @Test
     public void testextmethod2() {

         System.out.println("test ext method 2");

     }

}

这是输出

test ext method 1
test ext method 2
Init
This is method 1
Init
This is method 2
Init
This is method 3

注意:我不确定 Junit4 是否支持此功能。我在 JUnit5 中这样做

原文由 Rohit Singh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题