JUnit:@Before仅适用于某些测试方法?@Nested + @BeforeEach

2022-08-31 14:48:55

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


答案 1

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


答案 2

@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中执行此操作


推荐