2016-12-18 26 views
1

作成したファイルをEclipseのsrcフォルダのresourcesフォルダにあるベンチマークファイルと比較するJUnitTestテストを作成しています。Java - 2つの同一ファイルのInputStreamを比較します

コード

public class CompareFileTest 
{ 
    private static final String TEST_FILENAME = "/resources/CompareFile_Test_Output.xls"; 

@Test 
public void testCompare() 
{ 
    InputStream outputFileInputStream = null; 
    BufferedInputStream bufferedInputStream = null; 

    File excelOne = new File(StandingsCreationHelper.directoryPath + "CompareFile_Test_Input1.xls"); 
    File excelTwo = new File(StandingsCreationHelper.directoryPath + "CompareFile_Test_Input1.xls"); 
    File excelThree = new File(StandingsCreationHelper.directoryPath + "CompareFile_Test_Output.xls"); 

    CompareFile compareFile = new CompareFile(excelOne, excelTwo, excelThree); 

    // The result of the comparison is stored in the excelThree file 
    compareFile.compare(); 

    try 
    { 
     outputFileInputStream = new FileInputStream(excelThree); 
     bufferedInputStream = new BufferedInputStream(outputFileInputStream); 

     assertTrue(IOUtils.contentEquals(CompareFileTest.class.getResourceAsStream(TEST_FILENAME), bufferedInputStream)); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 
} 

しかし、私は、任意の詳細がなくて、アサーションエラーメッセージが表示されます。私はちょうど比較ファイル操作からベンチマークファイルを作成して以来、両方のファイルが同一でなければなりません。

ありがとうございます!

編集:スリムのコメントの後、私はファイル差分ツールを使用して、両方のファイルが異なっていることがわかりましたが、コピーされているので、どうなったのかわかりません。たぶん、タイムスタンプなどがありますか?

+1

'CompareFileTest.class.getResourceAsStream(TEST_FILENAME)'を変数に抽出し、nullでないことを確認します。 – roby

+0

@roby残念ながらヌルではありません。 –

+0

次に、両方のファイルをStringに変換してassertEqualsを試すことができます。 'IOUtils.toString(InputStream、Charset)'を使うことができます。 – roby

答えて

2

IOUtils.contentEquals()は、ブール値が「一致または不一致」よりも多くの情報を提供すると主張していないため、その情報から余分な情報を得ることはできません。

これらの2つのファイルが異なる理由を知りたい場合は、Javaから離れて他のツールを使用してファイルを比較することができます。圧延によって - ファイルが一致しないとき、あなたのJUnitテストはあなたより多くの情報を提供するために、あなたの目的は、(例えば、例外がExpected files to match, but byte 5678 differs [0xAE] vs [0xAF]を言うことができる)である場合の例https://superuser.com/questions/125376/how-do-i-compare-binary-files-in-linux

について、あなたはIOUtils.contentEquals()以外のものを使用する必要がありますまたは適切な何かを探すことでComparing text files w/ Junit

+0

ありがとうございました!私は2つのExcelファイルを比較しているので、どちらのバイトも正しくないという詳細なエラーメッセージは期待していませんが、とにかく理解できないでしょう。私の問題は、両方のファイルがお互いに直接コピーされているべきで、なぜJavaが比較のためにfalseを返すのか理解できないからです。 –

+1

'StandingsCreationHelper.directoryPath +" CompareFile_Test_Output.xls "と'/resources/CompareFile_Test_Output.xls'は同じファイルを参照していますか? http://stackoverflow.com/questions/17351043/how-to-get-absolute-path-to-file-in-resources-folder-in-your-project – slim

+0

これらは同じファイルを指していませんが、彼らは同一のファイルを指しています。 –

関連する問題