0

我遇到了一个有趣的情况,因为 java 的 File.listFiles() 方法返回目录中的文件列表,而对顺序没有任何保证。一个类使用此 listFiles() 方法从目录中的所有文件中读取一些信息并写入 OutputStream。相应的 JUnit 测试用例尝试将写入输出流的数据与一些预期的 byteArray 进行比较。测试在我的开发机器和生产堆栈上通过,但在开发服务器上失败,因为它使用不同的操作系统和不同版本的 Java。

File.listFiles 中如何按字母顺序排列?解决方案是强制对从 File.listFiles() 返回的数组进行排序。但我对这个解决方案并不满意,因为它正在做一些额外的工作,只是为了让 JUnit 测试能够通过。

所以我只是想知道是否有更好的方法。有什么建议吗?谢谢

4

1 回答 1

3

我看不出总是对列表进行排序有问题。您不仅是为了单元测试而这样做:减少系统中的随机性通常是一个好主意(它使测试更容易,当问题发生时,它更容易重现)。确实,您正在做额外的工作,但除非您正在阅读成千上万的文件,否则排序不太可能成为瓶颈(当然,定期分析)。

所以在我看来,排序是最好的选择。

如果您不想/不能这样做,另一种选择是使单元测试更智能;例如,不要一次比较整个 byteArray,而是检查总大小以及每个文件的结果是否存在于数组中。或者在测试中解析和排序数组(尽管这可能很复杂)。

于 2013-02-19T21:15:27.200 回答