在Java中比较两个Excel文件的最简单方法?
我正在为一些生成Excel文件(二进制文件)的代码编写JUnit测试。我有另一个包含预期输出的Excel文件。将实际文件与预期文件进行比较的最简单方法是什么?
当然,我可以自己编写代码,但我想知道在受信任的第三方库(例如Spring或Apache Commons)中是否有已经存在的方法可以做到这一点。
我正在为一些生成Excel文件(二进制文件)的代码编写JUnit测试。我有另一个包含预期输出的Excel文件。将实际文件与预期文件进行比较的最简单方法是什么?
当然,我可以自己编写代码,但我想知道在受信任的第三方库(例如Spring或Apache Commons)中是否有已经存在的方法可以做到这一点。
你可以考虑使用我的项目simple-excel,它提供了一堆Hamcrest Matchers来完成这项工作。
当您执行类似操作时,
assertThat(actual, WorkbookMatcher.sameWorkbook(expected));
例如,你会看到,
java.lang.AssertionError:
Expected: entire workbook to be equal
but: cell at "C14" contained <"bananas"> expected <nothing>,
cell at "C15" contained <"1,850,000 EUR"> expected <"1,850,000.00 EUR">,
cell at "D16" contained <nothing> expected <"Tue Sep 04 06:30:00">
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
这样,您就可以从自动化测试中运行它,并在开发时获得有意义的反馈。
您可以在我网站上的这篇文章中阅读更多相关信息
以下是我最终所做的(DBUnit完成了繁重的工作):
/**
* Compares the data in the two Excel files represented by the given input
* streams, closing them on completion
*
* @param expected can't be <code>null</code>
* @param actual can't be <code>null</code>
* @throws Exception
*/
private void compareExcelFiles(InputStream expected, InputStream actual)
throws Exception
{
try {
Assertion.assertEquals(new XlsDataSet(expected), new XlsDataSet(actual));
}
finally {
IOUtils.closeQuietly(expected);
IOUtils.closeQuietly(actual);
}
}
这将比较两个文件中的数据,没有来自任何可能不同的不相关元数据的漏报风险。希望这有助于某人。