从 JUnit 中的“之前”方法中排除单个测试

2022-09-01 13:55:47

我的测试类中的所有测试在执行每个测试之前都执行一个“before”方法(用JUnit的注释)。@Before

我需要一个特定的测试来不执行这个方法。

有没有办法做到这一点?


答案 1

您可以使用 TestRule 执行此操作。您可以使用一些描述的注释来标记要跳过之前的测试,然后在TestRule的apper方法中,您可以测试该注释并执行所需的操作,如下所示:

public Statement apply(final Statement base, final Description description) {
  return new Statement() {
    @Override
    public void evaluate() throws Throwable {
      if (description.getAnnotation(DontRunBefore.class) == null) {
        // run the before method here
      }

      base.evaluate();
    }
  };
}

答案 2

请考虑使用运行器来允许您拥有两个内部测试类。一个具有所需的方法,另一个没有。@Enclosed@Before

封闭

@RunWith(Enclosed.class)
public class Outer{

    public static class Inner1{

     @Before public void setup(){}

     @Test public void test1(){}
    }

  public static class Inner2{

   // include or not the setup
   @Before public void setup2(){}

   @Test public void test2(){}
  }

}