如何解决使用AssertJ在Java中比较2个csv
我在Java中有此方法,正在尝试使用assertJ比较2个csv的文件,该方法如下。我正在使用带有正则表达式功能的ignorefields,如下所示。正则表达式用于忽略带有时间戳的库伦的值。我看到这些列仍在进行比较,并且断言失败。谁能让我知道我在这里做错了什么吗?
公共类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: 在逐字段递归比较时,发现以下差异:
顶级实际对象和预期对象不同:
- 实际值:“ 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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。