0

パラメータを取るメソッドをテストしていListます。例えば:

public String foo(List<String> list) {
    return list.contains("A") ? "OK" : "Failed";
}

私はJUnit 4理論を使用して、潜在的な要素の小さなセットから、長さ3までのすべての可能なリストでテストしています:

@RunWith(Theories.class)
public class TestFoo {

    @DataPoints
    public static List<String> potentialElements() {
       return Arrays.asList(null, "A", "B");
    }

    @Theory
    public void foo_returns_OK_when_list_contains_A(
        String val1, String val2, String val3) {

        List<String> list = Stream.of(val1, val2, val3)
            .filter( x -> x != null)
            .collect(Collectors.toList());

        assumeThat(list, hasItem("A"));

        assertThat(foo(list), is("OK"));
    }
}

これは機能しますが、ちょっとした回避策のように感じます。val1,val2,val3少しコードの匂いがします。より長いリストでテストしたい場合、すぐに非常に扱いにくくなります。

私は自分の理論を次のように書けるようにしたいと思っています。

@Theory
public void foo_returns_OK_when_list_contains_A(List<String> list) {

    assumeThat(list, hasItem("A"));

    assertThat(foo(list), is("OK"));
}

(おそらくいくつかの注釈付き)

もちろん、独自の を作成できることは承知していParameterSupplierますList<List<String>>。これにより、可能なすべての組み合わせを生成する必要があります。これを行う方法を説明する答えは必要ありません。

私が知りたいのは、Theoriesランナーはすでにデータポイントのデカルト積を作成する方法を知っているので、これらの積で構成されるコレクションを作成するために、私が使用したよりもきちんとした方法があるかどうかです。

4

0 に答える 0