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を使用しています。
ヒントをありがとうございました。