测试读写文件系统的类时的单元测试最佳实践

时间:2011-09-08 08:45:14

标签: java unit-testing junit

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

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

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

解决此类问题的标准方法是什么?

3 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:9)

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

答案 2 :(得分:7)

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