JUnit Theory数据点作为集合元素

时间:2017-10-18 10:28:20

标签: java junit junit-theory

我正在测试一个采用List参数的方法。例如:

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

我正在使用JUnit 4 Theories从一小部分潜在元素中测试每个可能的长度为三的列表:

@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跑步者已经知道如何创建数据点的笛卡尔积,是否有比我使用的更简洁的方法来填充由这些产品组成的集合? / p>

0 个答案:

没有答案