次の状況を想像してみてください: (醜い) コードをリファクタリングできるようにするために、テストを書きたいレガシ アプリケーションがあります。
これで、いくつかの制約を処理するコードの大きな塊ができました。基本的には、この署名に要約されます。
public Boolean isValidRequest(Boolean constraint0, Boolean constraint1, Boolean constraint2, BooleanConstraint3) {
return constraint0 && constraint1 && constraint2 && constraint3;
}
ここでテストしたいのは、まさにその「チェーン」です (ここでは、すべての制約が「&&」でチェーンされていますが、これがそのままであることを確認したいと思います。たとえば、タイプミスはありません!)
すべての組み合わせをテストするには、n が制約の数である n² テストを作成する必要があります。ここでは 4² になるため、16 回のテストが行われます。もっと簡単な方法はないかと思います。唯一の有効なテストケースは次のとおりです。
@Test
public void testAllConstraintsFulfilled() {
assertThat(myObjectToTest.isValidRequest(true, true, true, true)).isTrue();
}
他のすべての組み合わせは失敗するはずですが。他の 15 個のテストケースを手動で作成するのをスキップして、代わりに次のように言う方法があるのだろうかと思います。
1) Try all combinations
2) Only (true, true, true, true) should not fail
私はmockito、assertj、junit4を利用できます。ヒント、アイデアはありますか?