0

「コア」モジュールが一連の共通インターフェースを定義し、他のモジュールがバックエンドで異なるライブラリを使用してそれらのインターフェースを実装するプロジェクトを開始しています。これは SLF4J に非常に似ており、API モジュールは使用できるすべての操作を記述し、バインディング モジュールはそれらの操作を Log4j、java.util logging、Logback などのさまざまなロギング フレームワークに実装します。これを使用するには、API モジュールとバインディング モジュールの 1 つに依存し、API のみと対話します。

私の問題はテストにあります。API は可能なすべての操作を表現し、すべてのバインド モジュールは同じように動作する必要があるため、予想される動作を説明する一連のテストを作成し、すべてのバインド モジュールに対して同じテストを実行したいと考えています。多くの努力を繰り返さずにこれを機能させるには、どのように整理すればよいですか?

これは Groovy をふんだんに使った Java プロジェクトで、Gradle でビルドする予定です。

4

2 に答える 2

1

私は以前にJUnitでこの種のことをしました。私がしたことは、すべてのロジックを使用して一連の抽象テストクラスを定義することでした。

public abstract AbstractTestBase {
    protected abstract CommonInterface getInstance(); //for subclasses to implement

    @Test
    public void testSomething() {
       CommonInterface instance = getInstance();
       //test instance
    }
}

そして、具象サブクラスは通常、テスト対象の具象実装を返す小さなクラスです。

public class TestSomeImplementation extends AbstractTestBase {
    protected CommonInterface getInstance() {
        return new SomeImplementation();
    }
}

いくつかでは、特定の実装のための特定のテストを追加しましたが、あなたの場合、私はあなたがそうする必要がないことを理解しています。

于 2013-03-15T04:06:05.130 に答える
1

それは結合メカニズムに依存します。複数のバインディングが共存できる場合は、バインディングごとに同じテスト クラス/メソッドを実行するデータ駆動型テストを作成することで、テスト レベルで問題に取り組むことができます。(これを実現する方法の詳細は、使用しているテスト フレームワークによって異なります。) バインディングが共存できない場合は、ビルド レベルで問題に取り組むことができます。たとえばTest、クラス パスの実装 Jar を除いて、同じように構成された 10 個のタスクを作成できます。

于 2013-03-17T12:13:21.377 に答える