在我的测试类中的所有测试执行“之前”的方法(使用JUnit的注解@Before
每个测试的执行前)。
我需要一个特定的测试不是方法之前执行此操作。
有没有办法做到这一点?
在我的测试类中的所有测试执行“之前”的方法(使用JUnit的注解@Before
每个测试的执行前)。
我需要一个特定的测试不是方法之前执行此操作。
有没有办法做到这一点?
不幸的是,你必须编写这个逻辑。 JUnit的不具备这样的功能。 一般来说,你有2个解决方案:
@RequiresBefore
需要这本注释和标记测试。 测试运行将解析注释,并决定“之前”的方法或不是否运行。 第二种解决方案是清晰。 首先是简单的。 这是由你来选择其中之一。
你可以用做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();
}
};
}
考虑使用@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(){}
}
}
你也可以通过撤消什么做在解决这个@Before
设置内部测试案例。 这是怎么可能看,
@Before
public void setup() {
TestDataSetupClass.setupTestData();
}
@Test
public void testServiceWithIgnoreCommonSetup() {
TestDataSetupClass.unSet();
//Perform Test
}
将有这里的解决方案的优点和缺点。 次要CON因为这是,设置和未设置步骤的不必要的周期。 但是顺利的话,如果一个人需要做的只有一个测试用例出几百并避免编写自AOP或维护多个内部测试类的开销。