6

BaseTestすべての拡張サブクラスに「ユニバーサルsetUp()メソッド」を提供するだけのクラスを作成したいと思います。

public class BaseTest {
    @Before
    public void setUp() {
        System.out.println("setUp() was called!");

        // Doesn't really matter what this is doing...
        EnvironmentConfigurator.configureEnvForTesting();
    }
}

それで:

public class WidgetTest extends BaseTest {
    @Test
    public void test1() {
        fail();
    }

    @Test
    public void test2() {
        fail();
    }
}

したがって、理想的には、によって注釈が付けられたサブクラスメソッドが実行されるたびに@Test、JUnitは最初にBaseTest#setUp()メソッドを呼び出します。このメソッドは何でも実行します(実際には重要ではありません)。おそらく、いくつかのモック状態を初期値にリセットして、各テストを「クリーンな状態」などで開始できるようにします。繰り返しになりますが、実際には問題ではありません。

残念ながら、このコードを実行するsetUp() was called!と、画面への印刷が1回しか表示されないため、メソッドが希望どおりにBaseTest「ラップ」されていないことは明らかです。@Testこれを達成する方法はありますか?前もって感謝します!

4

1 に答える 1

17

これを実行したところ、両方のテストメソッドが呼び出され、両方の回でsetUpが呼び出されました。

派生クラスにも注釈付きメソッドがある場合は@Before、基本クラスのセットアップメソッドにsetUpBase()などの別の名前を付ける必要があります。これは、メソッド名が同じ場合@Before、派生クラスの注釈付きメソッドのみが呼び出されるためです。基本クラスのメソッドをオーバーライドします。

于 2013-01-02T14:38:28.637 に答える