この時点まで、私は私のプロジェクトでは、特定のアプリケーションをサポートするためのテストを開発しています。今、私がテスト稼働のセットを持っていることを、私は他の同様のアプリケーションのサポートを提供する必要があります。彼らは同じアクションを生み出すが、異なるコンテキストからの両方の両方のアプリケーションのための結果は、私のシステムで同じである必要があります。事は、私は他のテストケースのために自分のコードをコピーせずに、私は最初のもののために作られたテストを再利用する可能性があるとの方法を探しています、です。
私は現在のJava EE 8下のJUnit 4を使用しています。
私の状況は次のようなものになります。次のようなテストを考えます
class TestExample {
Context context;
@Before
public void setUp() {
context = new ContextA();
}
@After
public void terminate() {
context.dispose();
}
@Test
public void test1() {
context....
}
}
abstract class Context {
@Override
public void dispose() {
...
}
}
class ContextA extends Context {
}
class ContextB extends Context {
}
私はかつてContextAため、その後ContextBのためのテストを行うことができるようにしたいと思います。
--- O ---
だから、しばらくした後に、この問題に戻って来た後、私はこのスレッドから私の問題には3つの可能な解決策を集めました。
- パラメトリ
- テストの継承
- コンテキスト組成
しかし、私は完璧なソリューション可能にするそれらのどれを発見した本当のテストケースでそれらすべてを試した後。彼らは、私はこの質問に提示しているという問題を解決するのですが、現時点では、実際のケースがでてくるとコンテキストは、これらのオプションは複雑で醜いになって起動し、それらの間でわずかに異なる開始します。
それぞれ異なるコンテキストのテストソースコードをコピーする:最後に、私は、最も簡単な解決策を選択しています。それは動作しますが、これに伴う問題は、単一のテストへの変更は、それのすべてのコピーに複製されなければならないとして、テストを維持することは時間の経過とともに難しくなるということです。
どのように私は別のテストコンテキストのJUnitテストメソッドを再利用していますか?
一般的に、あなたがやるではありません。
ユニットテストの一つのコア・ポイントは次のとおりです。彼らはあなたが後で本番コードに変更を加えたとき、あなたはすぐにバグを識別するのに役立ちます。意味:ユニットテストのための主要な要件は、あなたがすることができるということである読んで理解すぐにそれらを。ものは難しく、「複雑な」ソリューションのようなコードの重複を回避することができるには問題があるということ。
その観点から、テストコードのための「規則」が時々製品コードと同じではありません。生産コードでは、(ほぼ)すべてのコストで、コードの重複を避けるためにします。
しかし、テストコードのために、それが持っていることは完全に罰金ことができる2つの非常によく似たことを行う別のテストクラス... 2回。多分、ちょうど多分あなたは、いくつかのユーティリティクラスに(具体的な、複雑なアサーションを行うように)ヘルパー・メソッドに共通のコードを抽出します。
それを言って、1つの潜在的な解決策:あなたは本当に複数の「入力」にまったく同じテストを実行したい場合は、その後、私はあなたが見てお勧めパラメータ化例えばテスト。代わりにハードコーディングのcontext
@Beforeコード内のインスタンスを、あなたは、単に複数の異なる可能性がありcontext
、オブジェクトを、そしてそれらのそれぞれについて、すべてのテストを実行します。