我有一系列自定义对象。我想循环遍历每个元素并检查该自定义对象的
String
类型的特定字段。我想使用 assertEquals
将该值与预期值进行比较。但我无法正确地写下声明。
我的代码:
MyCustomObject[] items = buildItems();
Arrays.asList(items).stream().map(MyCustomObject::getGroupName).forEach(assertEquals("",groupName));
您还没有在任何地方收集。你可以这样做:
List<String> groups = Arrays.asList(items).stream().map(MyCustomObject::getGroupName).collect(Collectors.toList());
groups.forEach(group -> assertEquals(group,groupName));
第一行获取使用
MyCustomObject::getGroupName
返回的字符串列表,第二行对每个字符串应用 Consumer
。
您也可以将其减少为一行,但我认为这样做并不总是最好的,因为它难以阅读并且对其他人来说难以解释:D
您缺少 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
迭代这些值并在每次迭代时检查它们是一个坏主意。 例如,如果总共 100 次迭代中的 23 次迭代 (23/100) 测试失败怎么办? 一旦完成 23 次迭代的修复,您将需要重新运行测试...
最好使用
parameterized tests
:
您可能有多个数据提供,如其他方法或 CSV 格式。