我有一组Junit 4测试类,我想在多个模块中运行,具有不同的BeforeClass,AfterClass,Before和After钩子。通过@Rule
注入,我只得到测试方法的包装,但没有BeforeClass和AfterClass行为。
此外,我不想对测试运行器这样做,因为我已经修复了测试运行器以用于大量测试。
对目标模块中的每个测试类进行子类化并在那里应用自定义似乎不是一个好的解决方案。
最好的方法是在目标模块中宣布这样的东西
@RunWith(Suite.class)
@Suite.SuiteClasses({
investmentTests.class,
catalogTests.class,
markerTests.class
})
public class AllTests {
// why on earth I need this class, I have no idea!
}
并有一些环境挂钩来应用前/后代码。
您是否遇到过此问题的解决方案?
答案 0 :(得分:2)
正如NamshubWriter所评论的那样,在JUnit4.9中可以找到 org.junit.ClassRule 。 @ClassRule
代替@Rule
; TestRule
代替MethodRule
。
参见示例:
public static class CustomCounter extends TestRule {
public int count = 0;
@Override
protected Statement apply(final Statement base, Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
count++;
base.evaluate();
}
};
}
}
public static class ExampleTestWithCustomClassRule {
@ClassRule
public static CustomCounter counter= new CustomCounter();
@Test
public void firstTest() {
assertEquals(1, counter.count);
}
@Test
public void secondTest() {
assertEquals(1, counter.count);
}
}