junit
Пользовательские тестовые правила
Поиск…
замечания
Есть льготы для обоих. Расширение ExternalResource это удобно, особенно если нам требуется только before() чтобы установить что-то.
Тем не менее, мы должны знать, что, поскольку метод before() выполняется за пределами try...finally , любой код, который требуется очистить after() , не будет выполнен, если есть ошибка во время выполнение before() .
Вот как он выглядит внутри ExternalResource :
before();
try {
base.evaluate();
} finally {
after();
}
Очевидно, что если какое-либо исключение выбрано в самом тесте или другом вложенном правиле, то после этого все равно будет выполнено.
Пользовательский @TestRule по реализации
Это особенно полезно, если у нас есть класс, который мы хотим расширить в правиле. См. Пример ниже для более удобного метода.
import org.junit.rules.TestRule;
import org.junit.runners.model.Statement;
public class AwesomeTestRule implements TextRule {
@Override
public Statement apply(Statement base, Description description) {
return new AwesomeStatement(base);
}
private static class AwesomeStatement extends Statement {
private Statement base;
public AwesomeStatement(Statement base) {
this.base = base;
}
@Override
public void evaluate() throws Throwable {
try {
// do your magic
base.evaluate(); // this will call Junit to run an individual test
} finally {
// undo the magic, if required
}
}
}
}
Пользовательский @TestRule по расширению
JUnit имеет абстрактную реализацию @TestRule которая позволяет вам писать правило более простым способом. Это называется ExternalResource и предоставляет два защищенных метода, которые могут быть расширены следующим образом:
public class AwesomeTestRule extends ExternalResource {
@Override
protected void before() {
// do your magic
}
@Override
protected void after() {
// undo your magic, if needed
}
}