1

同じインターフェースの異なる実装である2つのクラスがあります。実装の正しさをテストするためのかなり大規模で複雑な単体テストのセットもあります。

2つ以上のクラスに対して同じテストセットを実行するための最良の方法を探しています。残念ながら、外部の制約により、私はJUnit4の使用に制限されています。そのため、派手なnewfangledテストフレームワークは私には機能しません。

テストを盲目的に別のファイルにコピーしたり、2つのファイルの同期を維持するというメンテナンスの頭痛の種を引き起こしたりせずに、これを行うためのお気に入りの方法を提案できますか。

明確化:2つのクラスは完全に独立している必要があります。目標は、両方のクラスがまったく同じ入力に対してまったく同じ出力を生成することをテストすることです。クラスは共通インターフェースに書き込まれます。したがって、同じインターフェイスの2つの異なる実装に対して同じテストケースを実行する方法が問題になります。

4

3 に答える 3

3

これはどう:

public abstract class TestBase {
    private TheInterface unitToTest;

    protected abstract TheInterface getInterfaceImplementation();

    @Before
    public void setImplementation() {
         unitToTest = getInterfaceImplementation();
    }

    @Test
    public void test1 {
         //excercise and assert unitToTest
    }
}

public class ImplementationOneTest extends TestBase {
    protected TheInterface getInterfaceImplementation() {
        return new ImplementationOne();
    }
}

public class ImplementationTwoTest extends TestBase {
    protected TheInterface getInterfaceImplementation() {
        return new ImplementationTwo();
    }
}

etc.
于 2013-03-13T23:16:22.933 に答える
0
  1. 共通の実装を 1 つのクラス (ベースまたはデリゲート) にリファクタリングします。
  2. リファクタリングされた一般的な実装のテストで現在の単体テストを再利用します。
  3. 実装が異なる特定のテストを提供します。

共通の実装の詳細がない場合は、実装ごとに異なる単体テストを作成する必要があります。

于 2013-03-13T23:15:03.357 に答える
0

インターフェイス(および内部のテストメソッド)を受け取るコンストラクターで基本テストクラスを作成できます。そして、それぞれがいくつかのインターフェース実装を に渡す具体的なクラスにsuper()

于 2013-03-13T23:13:21.503 に答える