2015-05-04 64 views
1

我有一個簡單的JUnit測試,它檢查兩個文件具有相同的內容。它在我的Unix筆記本電腦中工作得很好。比較依賴於操作系統的文件。 JUnit

這是測試:

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認爲每一行都不一樣
然後測試就落了。

問題是,操作系統是什麼?如果這是真的,有沒有什麼辦法可以比較文件內容不依賴手術系統

回答

1

我的猜測是,這是最有可能的,這是由於\ N值,這在類似Unix的軟件\ r \ ñ。

無論如何,查看兩個文件是否具有相同內容的正確方法是對它們進行哈希(即通過sha1)並檢查哈希是否匹配!

+0

非常喜歡你的答案。你能解釋一下如何比較兩個文件散列? – Manu

+1

我不是java專家=)但顯然這個答案是你想要的http://stackoverflow.com/questions/6293713/java-how-to-create-sha-1-for-a-file然後只是比較兩個散列值 – Andrea

+0

「正確的方法檢查散列是否匹配」不!唯一可以用這種檢查來斷言的是兩個文件都不相等。如果散列值相等,則不能確定文件是否相同(儘管它們很可能)。這不是正確的方法。 – Seelenvirtuose

0

此行爲可歸因於Line Feed在兩個操作系統上都不相同。 如果你希望它是獨立的平臺,你應該使用

System.getProperty("line.separator"); 

而且運行時拿起價值,你可能想看看字符編碼爲文件

相關問題