7

私は interface を書きましたMyInterface。これは、さまざまな実装者によって実装される予定です。

MyInterfaceTestまた、すべての実装者が実装をテストするために使用できる汎用テスト メソッドを含むclass も作成しました。

JUnitテストとして機能させる方法がわかりません。

現在、私は次のようなものを持っています:

public class MyInterfaceTest {
    private static MyInterface theImplementationToTest = null;

    @BeforeClass public static void setUpBeforeClass() throws Exception {
                // put your implementation here:
        theImplementationToTest = new Implementation(...);
    }

    @AfterClass public static void tearDownAfterClass() throws Exception { 
        theImplementationToTest = null;
    }

    @Test public void test1() { /* uses theImplementationToTest */ }    
    @Test public void test2() { /* uses theImplementationToTest */ }    
}

各実装の初期化に時間がかかるため、静的メソッドを使用するsetUpBeforeClassため、すべてのテストで一度初期化したいと考えています。

このバージョンのテストでは、実装者はコードを変更しsetUpBeforeClassて独自の実装を配置する必要があります。

を記述する別の方法があると確信しているMyInterfaceTestため、実装者はそれを継承するか、パラメーターを送信するだけでよく、コードを変更する必要はありません。ただし、JUnit を機能させるのに十分な経験がありません。これを行う方法を教えてください。

4

2 に答える 2

7

サブクラスに before クラス メソッドだけを実装させ、すべてのテストを継承させることができます。

import org.junit.*;

public class ImplementingClassTest extends MyInterfaceTest {

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        // put your implementation here:
         theImplementationToTest = new MyInterfaceImpl();
    }

}

これにより、作成している抽象クラスは次のようになります。

import org.junit.*;

public abstract class MyInterfaceTest {
    protected static MyInterface theImplementationToTest = null;

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        theImplementationToTest = null;
    }

    @Test
    public void test1() { /* uses theImplementationToTest */
    }

    @Test
    public void test2() { /* uses theImplementationToTest */
    }
}

通常は、abstract を実装するために必要なサブクラスとしてメソッドを作成します。静的なセットアップ方法であるため、ここではできません。(さらに、これは多くの場合アンチパターンであるため、時間がかからないようにインスタンス化をリファクタリングすることをお勧めします)。

于 2012-07-22T14:36:44.680 に答える
-4

jar名junit-4.10.jarをダウンロードして、プロジェクトに追加する必要があります。次に、クラスに、のようなMyInterfaceTestという名前のクラスを継承させます。TestCasepublic class MyInterfaceTest extends TestCase

于 2012-07-22T14:42:20.800 に答える