java - 比较两个相同列表时 assertEquals 失败

标签 java list collections junit

我正在运行以下测试来检查两个列表是否相同:

public void testSortInputStream() throws IOException {
        field = "User ID";
        streamSorter.sort(inputStream, outputStream, comparator);

        Reader actualCSVReader = new BufferedReader(outputStreamToInputStreamReader(outputStream));
        Reader expectedCSVReader = new BufferedReader(new InputStreamReader(expectedStream));

        List<CSVRecord> actualCSVRecords = CSVFormat.RFC4180.parse(actualCSVReader).getRecords();
        List<CSVRecord> expectedCSVRecords = CSVFormat.RFC4180.parse(expectedCSVReader).getRecords();

        Assert.assertEquals(expectedCSVRecords, actualCSVRecords);
    }

奇怪的是,断言失败并显示以下消息:

 expected: java.util.ArrayList<[CSVRecord [comment=null, mapping=null, recordNumber=1, values=[10, Ruby, Wax, ruby, Employee, 12-12-2014 08:09:13]], CSVRecord [comment=null, mapping=null, recordNumber=2, values=[3, David, Payne, Dpayne, Manager, 23-09-2014 09:35:02]]]> 


 but was: java.util.ArrayList<[CSVRecord [comment=null, mapping=null, recordNumber=1, values=[10, Ruby, Wax, ruby, Employee, 12-12-2014 08:09:13]], CSVRecord [comment=null, mapping=null, recordNumber=2, values=[3, David, Payne, Dpayne, Manager, 23-09-2014 09:35:02]]]>

但是,如果比较这两个列表,它们是绝对相同的。我在这里错过了什么?

最佳答案

根据 CSVRecord 's javadoc你链接的,CSVRecord不会覆盖 equals(Object) - 它继承了 java.lang.Object 的默认实现.因此,您不能依赖它进行相等性检查,包括嵌套检查,例如 List<CSVRecord> .它并不完美,但您可以使用一个肮脏的技巧来转换您的 CSVRecord s 到字符串,并比较它们的表示:

List<String> actualCSVRecords =  
    CSVFormat.RFC4180
             .parse(actualCSVReader)
             .getRecords()
             .stream()
             .map(Object::toString)
             .collect(Collectors.toList());

List<String> expectedCSVRecords =
     CSVFormat.RFC4180
             .parse(expectedCSVReader)
             .getRecords()
             .stream()
             .map(Object::toString)
             .collect(Collectors.toList());

Assert.assertEquals(expectedCSVRecords, actualCSVRecords);

关于java - 比较两个相同列表时 assertEquals 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41463538/

相关文章:

java - 如何从字符串中删除换行符和空行

list - 在 R 中解压省略号的参数列表

python - 从列表中随机删除两个相邻值

php - Magento Collection/Grid - 重命名字段/列值

java - Struts2 Bootstrap 插件客户端使用文件验证

java - xpath 获取子节点相对于 XML 中父节点的位置

c# - InvalidArgument= '0' 的值对于 'index' 无效。参数名称: index

multithreading - 在线程中更改 Observable 集合(绑定(bind)到 JavaFX 节点)

Java 属性驱动集合

java - 将 JPanel 转换为 JScrollPane 中的图像