如何为数组流中的每个元素调用assertEquals

问题描述 投票:0回答:3

我有一系列自定义对象。我想循环遍历每个元素并检查该自定义对象的

String
类型的特定字段。我想使用
assertEquals
将该值与预期值进行比较。但我无法正确地写下声明。

我的代码:

MyCustomObject[] items = buildItems();
Arrays.asList(items).stream().map(MyCustomObject::getGroupName).forEach(assertEquals("",groupName));
java junit java-stream
3个回答
1
投票

您还没有在任何地方收集。你可以这样做:

List<String> groups = Arrays.asList(items).stream().map(MyCustomObject::getGroupName).collect(Collectors.toList());
groups.forEach(group -> assertEquals(group,groupName));

第一行获取使用

MyCustomObject::getGroupName
返回的字符串列表,第二行对每个字符串应用
Consumer

您也可以将其减少为一行,但我认为这样做并不总是最好的,因为它难以阅读并且对其他人来说难以解释:D


0
投票

您缺少 lambda 中的参数;您引用的

groupName
值未声明。

应该是:

.forEach(groupName -> assertEquals("",groupName))

而不是:

.forEach(assertEquals("",groupName))

我在编译代码时遇到的编译错误指出这就是问题所在:

/Users/You/Path/To/YourTest.java:17: error: cannot find symbol
Arrays.asList(items).stream().map(MyCustomObject::getGroupName).forEach(assertEquals("",groupName));
                                                                                        ^
  symbol:   variable groupName
  location: class StreamForEachAssertEquals
1 error

-1
投票

迭代这些值并在每次迭代时检查它们是一个坏主意。 例如,如果总共 100 次迭代中的 23 次迭代 (23/100) 测试失败怎么办? 一旦完成 23 次迭代的修复,您将需要重新运行测试...

最好使用

parameterized tests
:

您可能有多个数据提供,如其他方法或 CSV 格式。

© www.soinside.com 2019 - 2024. All rights reserved.