1

次の状況を想像してみてください: (醜い) コードをリファクタリングできるようにするために、テストを書きたいレガシ アプリケーションがあります。

これで、いくつかの制約を処理するコードの大きな塊ができました。基本的には、この署名に要約されます。

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を利用できます。ヒント、アイデアはありますか?

4

1 に答える 1