Я реализовал JUnit 4 TestRule
(расширяя ExternalResource
) и ввел его как @ClassRule
в свой тестовый класс: я хочу инициализировать ресурс один раз для всех в каждом тесте этого класса и разорвать это в конечном итоге.
Моя проблема в том, что мои методы @Before
и @After
вообще не вызываются до/после моего метода @Test
: любая идея, почему это происходит?
Минимальный компилируемый пример:
package com.acme.test;
import static org.junit.Assert.assertNull;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.rules.ExternalResource;
class Coffee {
public void throwAway() {}
}
class CoffeeMachine extends ExternalResource {
Coffee whatElse;
@Override protected void before() throws Throwable {
whatElse = new Coffee();
}
@Override protected void after() {
whatElse.throwAway();
}
public Coffee gimmieCoffee() { return whatElse; }
}
public class CoffeeTester {
@ClassRule public static CoffeeMachine CM = new CoffeeMachine();
@Test public void drinkACoffee() {
Coffee c = CM.gimmieCoffee();
assertNull(c); // ---> Coffee is null!! (fuuuuuuuuuu...)
}
}
Я что-то недопонимаю здесь? Обратите внимание, что то же самое происходит с нестатическим @Rule
.
Я использую JUnit 4.11.
Большое спасибо за любой намек.