繁体   English   中英

使用 AssertJ 比较 Java 中的 2 个 csv

[英]using AssertJ for comparing 2 csv's in Java

我在Java中有这个方法,我试图使用assertJ比较2个csv的文件,方法如下。 我正在使用带有 Regex 函数的 ignorefields,如下所示。 Regex 用于忽略包含时间戳的 coulmns 的值。 我看到这些列仍在比较中并且断言失败。 谁能让我知道我在这里做错了什么?

公共类 RCSV {

public static void main(String[] args) throws IOException, CsvException {
    // TODO Auto-generated method stub
    
    try {
    CSVReader reader1 = new CSVReader(new FileReader("file1.csv"));
        List<String[]> Entries1 = reader1.readAll();
        System.out.println(Entries1);
    CSVReader reader2 = new CSVReader(new FileReader("file2.csv"));
        List<String[]> Entries2 = reader2.readAll();
        
        assertThat(Entries1).usingRecursiveComparison().ignoringFieldsMatchingRegexes("[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):[0-5][0-9]:[0-5][0-9]")
        .isEqualTo(Entries2);
    } catch (AssertionError e) {
        e.printStackTrace();
    }
     
}

}

这是我在控制台中看到的错误:java.lang.AssertionError: when recursively compare field by field,但发现以下差异:

顶级实际对象和预期对象不同:

  • 实际值:“2020-11-04 13:31:51”
  • 预期值:“2020-11-05 13:31:52”

ignoringFieldsMatchingRegexes忽略名称与正则表达式匹配的字段,不会根据字段值对其进行评估。

我认为更好的方法是从 CSVReader 读取的内容中过滤掉时间戳(如果可能)并使用简单的列表断言,例如: assertThat(entries1).isEqualTo(entries2)

如果您不能这样做,请尝试为String[]定义一个元素比较器,该比较器将忽略对应于时间戳的索引处的元素,然后使用以下断言:

assertThat(entries1).usingElementComparator​(comparatorIgnoringTimestamp) 
                    .isEqualTo(entries2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM