将字符串值列表传递给参数化的 JUnit 测试
Pass a list of string values to a parameterized JUnit test
我正在尝试将一组字符串值从属性文件传递到参数化 JUnit 测试。 Properties.values() returns Collection 而 JUnit 要求在 Collection 结构中传递参数。
这是否意味着我必须转换 Collection<Object> to Collection<Object[]>
,其中每个数组实际上是一个项目?
我试过这个:
Arrays.asList(new Object[][] {{theProperties.values()}});
但这将所有值放在一个对象中,并没有像我期望的那样创建一个集合。有人可以帮忙吗?
看起来参数化的 JUnit 测试需要一个集合,即使每个测试只有一个参数。
将集合转换为集合:
使用 Java 8:
Collection<String> c = Arrays.asList("a", "b");
Collection<Object[]> co = c.stream()
.map(ele -> new Object[]{ele})
.collect(Collectors.toList());
使用 Java 7 或以下:
Collection<String> coll = Arrays.asList("a", "b");
Collection<Object[]> params = new ArrayList<Object[]>();
for (String s : coll) {
params.add(new Object[] { s });
}
对于 Java 7 或以下,您可以:
- 写一个for循环(如上图)或者
- 将 Apache Commons CollectionUtils#collect 与 Transformer 一起使用或
- 使用 Guava 的 Collections2#transform 函数
我正在尝试将一组字符串值从属性文件传递到参数化 JUnit 测试。 Properties.values() returns Collection 而 JUnit 要求在 Collection 结构中传递参数。
这是否意味着我必须转换 Collection<Object> to Collection<Object[]>
,其中每个数组实际上是一个项目?
我试过这个:
Arrays.asList(new Object[][] {{theProperties.values()}});
但这将所有值放在一个对象中,并没有像我期望的那样创建一个集合。有人可以帮忙吗?
看起来参数化的 JUnit 测试需要一个集合,即使每个测试只有一个参数。
将集合转换为集合:
使用 Java 8:
Collection<String> c = Arrays.asList("a", "b");
Collection<Object[]> co = c.stream()
.map(ele -> new Object[]{ele})
.collect(Collectors.toList());
使用 Java 7 或以下:
Collection<String> coll = Arrays.asList("a", "b");
Collection<Object[]> params = new ArrayList<Object[]>();
for (String s : coll) {
params.add(new Object[] { s });
}
对于 Java 7 或以下,您可以:
- 写一个for循环(如上图)或者
- 将 Apache Commons CollectionUtils#collect 与 Transformer 一起使用或
- 使用 Guava 的 Collections2#transform 函数