0

私は統合テストアプリケーションに取り組んでいます。これはテストケースで行っていることです。cvsに保存されているテスト入力ファイルを読み取り、ファイルシステム内のファイルに書き込みます。アプリケーションは、次のディレクトリをポーリングします。ファイルを処理して出力ファイルを作成し、ディレクトリで出力ファイルをポーリングします。両方のファイルの内容が等しい場合、テストケースは成功します(入力ファイルと出力ファイルの両方を文字列に読み込んで比較しています) 。

問題は、このテストケースがLinuxシステムで実行されると失敗することです。これは、cvsに保存されているファイルが、行の終端としてCRLFを含むWindowsシステムからチェックインされたのに対し、生成された出力ファイルの行の終端は次のようになっているためです。 CR、これらのファイルを読み取って文字ごとに比較すると、不一致が発生しています。

誰かがここで助けることができます。

4

4 に答える 4

3

あなたはそれらを線で比較することを試みることができます。たとえば、これにはFileUtilsを使用します。

List<String> file1 = FileUtils.readLines(...);
List<String> file2 = FileUtils.readLines(...);
return file1.equals(file2);
于 2012-01-06T09:15:47.267 に答える
3

ホストオペレーティングシステムの行区切り記号は、次を使用して確認できます。System.getProperty("line.separator")

テキストファイルを使用しているため、ファイルの内容を1行ずつ比較することもできます。それを確認LineNumberReader.readLine()してください。

于 2012-01-06T09:22:07.053 に答える
0

ファイルをチェックインするとき、バイナリ ファイルであることを CVS に伝えることができ (cvs add -kb)、CVS は途中で行末を変換しません。

これには他の欠点もあります。たとえば、適切な差分がありませんが、実際に文字ごとにテストするのであれば、それは必要ないと思います。

ファイルを追加するときは -kb を指定する必要があることに注意してください。後で変更することはできません。

于 2012-01-06T09:32:43.867 に答える
0

ダウンロードしたファイルからすべての '\r' 文字を削除できますか? または、「\r\n」Windows 文字列を「\n」Linux 文字列に置き換えます。Mac の場合にも注意してください。行末は "\r" で識別できます。

于 2012-01-06T09:13:35.870 に答える