java File.listFiles() 顺序无法保证并导致 JUnit 测试失败

标签 java junit

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

how to File.listFiles in alphabetical order?解决方案是强制对 File.listFiles() 返回的数组进行排序。但我对这个解决方案不太满意,因为它做了一些额外的工作,以便 JUnit 测试能够通过。

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

最佳答案

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

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

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

关于java File.listFiles() 顺序无法保证并导致 JUnit 测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14967314/

相关文章:

java - 仅适用于月份和日期的简单日期格式

java - 当我在 CXF @WebMethod 中呈现自己的响应时如何设置内容类型

java - 使用Arquillian进行测试,如何共享Arquillian.xml?

Selenium 中的 java.lang.IllegalAccessError

java - JUnit 不显示 ExpectedException 消息

java - 具有不可变值的 ConcurrentHashMap - 同步替换?

java - 字符串值未显示在 output.setText 中

java - 如何用分词器构建解析器?

java - 如何使用 Mockito 注释注入(inject) @Value 构造函数参数

java - 编译依赖于jar文件的java文件