测试读写文件系统的类时的unit testing最佳实践

我有一个类在磁盘上对文件进行操作。 更确切地说,它遍历一个目录,读取具有给定后缀的所有文件,并对数据执行一些操作,然后将它们输出到新文件。

关于如何为这门课程设计unit testing,我有点怀疑。 我想安装方法在/ tmp / somefolder中创建临时目录和临时文件,但我怀疑这是一个坏主意,原因有两个(开发人员使用Windows,文件权限等)。

另一个想法是模拟我用来编写和读取磁盘的类,通过使用接口封装类然后提供模拟对象,但它似乎有点混乱。

处理这样一个问题的标准方法是什么?

你的策略是正确的,IMO。 请确保不要对临时目录进行硬编码。 使用System.getProperty("java.io.tmpdir")获取临时目录的路径,并在测试完成后使用测试中的finally块或@After方法清理创建的文件和目录。

如果使用JUnit 4.7及更高版本,则可以使用@TemporaryFolder规则透明地获取临时文件夹,该文件夹应在每次测试后自动清除。

嘲笑一切都是可能的,但可能比它的价值更多的努力。 您可以使用Java System.getProperty(“java.io.tmpdir”)提供的临时目录,无论您使用哪个系统,都可以写入该目录。 坚持使用短文件名,即使在古老的东西上运行,你也会安全。