JUnit:@Before只针对一些测试方法?

Nic*_*ner 40 java junit unit-testing

我有一些常见的设置代码,我已经考虑到标记的方法@Before.但是,并非所有这些代码都必须针对每个测试运行.有没有办法对其进行标记,以便该@Before方法仅在某些测试之前运行?

Kir*_*ein 36

只需将不需要设置代码的测试移出到单独的测试类中.如果你有一些常见的测试常用的代码,那就把它移到一个帮助类中.

  • 真正有用的@Kirschstein :( - “首先做对” (3认同)
  • 老实说,这不是一个答案。我所处的情况确实不应该将测试移动到另一个类,但我想避免在几十个测试中的一个之前执行 @BeforeMethod 。 (3认同)

Roh*_*ngh 18

@Nested + @ForEach

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

  1. 在测试类中创建一个内部类
  2. 使用 @Nested 注释内部类
  3. 在内部类中移动所有要使用的测试方法
  4. 在内部类中编写init代码并用@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");
    
     }

}
Run Code Online (Sandbox Code Playgroud)

这是输出

test ext method 1
test ext method 2
Init
This is method 1
Init
This is method 2
Init
This is method 3
Run Code Online (Sandbox Code Playgroud)

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


vto*_*tor 7

也可以通过JUnit 的Assume实现。然后您可以检查要处理的方法名称@Before

public class MyTest {
     @Rule
     public TestName testName = new TestName();

     @Before
     public void setUp() {
       assumeTrue(testName.getMethodName().equals("myMethodName"));
       // setup follows
     }
}
Run Code Online (Sandbox Code Playgroud)

查看该主题以获取有关 的更多见解@Rule

  • @aliteralmind“...你也可以直接在需要它们的测试中调用 before 和 after 函数...” - 不,你不能!有时,特殊注释会阻止这样做。例如@Transactional注解,它隐式地覆盖了带有事务的@Test方法。而且,如果您需要测试并发行为,则必须在 @Test 方法之外的某个位置打开另一个事务! (2认同)

duf*_*ymo 5

或者使用TestNG。它使您可以对测试进行更细粒度的控制。

  • 你能提供更多说明吗? (2认同)