高级别的,我有一个非常简单的 JUnit 测试类。我有几个@Tests 和一个@Before,它们做了一些设置。对于一个测试用例,设置会有所不同(我不希望它运行)。
通过一些搜索,我找到了https://stackoverflow.com/a/13017452/413254。这建议创建一个 @Rule 来检查特定注释并执行 @Before 语句。
我的困惑在于如何在规则中执行 @Before 方法。有没有办法做到这一点?还是我需要传入测试类本身并执行@before 方法(setup()
在下面的示例中)?
public class NoBeforeRule implements TestRule {
@Override
public Statement apply(final Statement base, final Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
if (description.getAnnotation(NoBefore.class) == null) {
// Is there something like `base.executeAllTheBefores()'
}
base.evaluate();
}
};
}
}
相关测试代码:
@Rule public NoBeforeRule mNoBeforeRule = new NoBeforeRule(this);
@Before
@Override
public void setup() {
}
@Test
public void testNeedSetup() {
// this should run setup()
}
@NoBefore
@Test
public void testNoSetup() {
// this should NOT run setup()
}