0

java の File.listFiles() メソッドがディレクトリ内のファイルのリストを順序の保証なしに返すため、私はおかしな状況に遭遇しました。1 つのクラスが、この listFiles() メソッドを使用してディレクトリ内のすべてのファイルから情報を読み取り、OutputStream に書き込みます。対応する JUnit テスト ケースは、出力ストリームに書き込まれたデータを予想される byteArray と比較しようとします。私の開発マシンと本番スタックではテストに合格しましたが、別の OS と別のバージョンの Java を使用しているため、開発サーバーでは失敗しました。

File.listFiles をアルファベット順にする方法は? 解決策は、File.listFiles() から返された配列の並べ替えを強制することです。しかし、JUnit テストに合格するためだけに追加の作業を行っているため、このソリューションには満足していません。

だから、もっと良い方法があるかどうか疑問に思っています。何かアドバイス?ありがとう

4

1 に答える 1

3

リストを常にソートしても問題はありません。単体テストのためだけに行っているわけではありません。通常、システムのランダム性を減らすことは良い考えです (テストが容易になり、問題が発生した場合の再現が容易になります)。余分な作業を行っているのは事実ですが、何千ものファイルを読み取っている場合を除き、並べ替えがボトルネックになることはほとんどありません (もちろん、定期的にプロファイルします)。

したがって、私の意見では、並べ替えが最適なオプションです。

これをしたくない/できない場合、他のオプションは単体テストをよりスマートにすることです。たとえば、byteArray 全体を一度に比較するのではなく、合計サイズと、各ファイルの結果が配列に存在することを確認してください。または、テストで配列を解析して並べ替えます (複雑になる場合があります)。

于 2013-02-19T21:15:27.200 に答える