Я реализовал 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.
Большое спасибо за любой намек.

