“前”在JUnit的方法排除来自各个测试(Exclude individual test from

2019-07-01 20:04发布

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

我需要一个特定的测试不是方法之前执行此操作。

有没有办法做到这一点?

Answer 1:

不幸的是,你必须编写这个逻辑。 JUnit的不具备这样的功能。 一般来说,你有2个解决方案:

  1. 只是单独的测试情况2测试情况:一种是包含需要测试“之前”运行,第二包含不需要此测试。
  2. 实现自己的试运行和注释您的测试中使用它。 创建自己的注释@RequiresBefore需要这本注释和标记测试。 测试运行将解析注释,并决定“之前”的方法或不是否运行。

第二种解决方案是清晰。 首先是简单的。 这是由你来选择其中之一。



Answer 2:

你可以用做TestRule 。 您标记要与一些描述注释之前跳过测试,然后,在TestRule的应用方法,您可以测试该批注,做你想做的,是这样的:

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();
    }
  };
}


Answer 3:

考虑使用@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(){}
  }

}


Answer 4:

你也可以通过撤消什么做在解决这个@Before设置内部测试案例。 这是怎么可能看,

@Before
public void setup() {
    TestDataSetupClass.setupTestData();
}

@Test
public void testServiceWithIgnoreCommonSetup() {
    TestDataSetupClass.unSet();
    //Perform Test
}

将有这里的解决方案的优点和缺点。 次要CON因为这是,设置和未设置步骤的不必要的周期。 但是顺利的话,如果一个人需要做的只有一个测试用例出几百并避免编写自AOP或维护多个内部测试类的开销。



文章来源: Exclude individual test from 'before' method in JUnit