2012-07-22 22 views
7

私はインターフェイスMyInterfaceを書きました。これは、別の実装者によって実装される予定です。一般的なJUnitテストクラス

私はまた、すべての実装者が実装をテストするために使用できる一般的なテストメソッドを含むクラスMyInterfaceTestを書きました。

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で十分な経験をしているわけではありません。どうすればいいか教えてください。

答えて

6

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

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 */ 
    } 
} 

通常、あなたが方法抽象を実装するために必要なサブクラスになるだろう:

import org.junit.*; 

public class ImplementingClassTest extends MyInterfaceTest { 

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

} 

これはあなたのような外観を書いている抽象クラスが行います。これは静的な設定方法なのでここではできません。 (また、反パターンであることが多いため、インスタンス化をリファクタリングして長時間を要しないようにすることもできます)。

-3

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

+1

これは元の問題をどのように解決するのに役立ちますか? –

+0

元の問題は何ですか? –

+0

静的なセットアップ/ティアダウンをサブクラスによって異なる実装に再利用する方法。私の答えに記載されています。 –

関連する問題