パラメータを取るメソッドをテストしてい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
ランナーはすでにデータポイントのデカルト積を作成する方法を知っているので、これらの積で構成されるコレクションを作成するために、私が使用したよりもきちんとした方法があるかどうかです。