比较依赖于操作系统的文件。 JUnit的

时间:2015-05-04 11:50:59

标签: java csv junit operating-system

我有一个简单的JUnit测试,它检查两个文件是否具有相同的内容。它在我的Unix笔记本电脑上完美运行。

这是测试:

    boolean response = false;
    try {
      File got = File.createTempFile("got-", ".csv");
      String outputPath = got.getAbsolutePath();
      testedObject.createCsvFile(outputPath);
      got = new File(outputPath);
      String expectedFilePath = getClass().getClassLoader().getResource("expected.csv").getFile();
      File expected = new File(expectedFilePath);
      response = FileUtils.contentEquals(got, expected); // Here it is the key
    } catch (IOException e) {
      // Nothing to do Yay!
    }
    Assert.assertTrue(response);

这是有效的,因为如果我手动比较两个文件,例如通过diff命令,则完全相同。现在,
我的teem-mate代码与 Windows 笔记本电脑,当他运行测试时,它已经破坏了!然后我们开始调试

从视觉上看,两个文件都是一样的;我的意思是在人类修订版中,您无法实现任何差异。但是如果在Cwin终端我们执行了: diff expected.csv got.csv 和Windows认为每一行都不同
测试结果。

问题是,操作系统是什么?如果是这样,有没有办法比较文件内容不依赖于操作系统

3 个答案:

答案 0 :(得分:1)

我的猜测是,这很可能是由于\ n值,在unix中就像软件一样\ r \ n。

无论如何,查看两个文件是否具有相同内容的正确方法是散列它们(即通过sha1)并检查散列是否匹配!

答案 1 :(得分:0)

此行为可归因于两个操作系统上的Line Feed不同。 如果您希望它与平台无关,则应使用

从运行时中获取值
System.getProperty("line.separator");

另外,您可能需要查看两个文件的char编码

答案 2 :(得分:0)

这个答案可以帮到你:Java Apache FileUtils readFileToString and writeStringToFile problems。该问题的作者正在谈论PDF文件,但这个答案对您的问题有意义。