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

Sil*_*rom 13 java junit unit-testing

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

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

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

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

Ali*_*ael 11

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

  • 该URL是404; 相反,请看中途停下来https://github.com/junit-team/junit/wiki/Rules (2认同)

JB *_*zet 9

你的策略是正确的,IMO.请确保不要对临时目录进行硬编码.使用System.getProperty("java.io.tmpdir")得到的临时目录的路径,并使用终于在您的测试或阻塞@After,一旦测试完成清理方法所创建的文件和目录.

  • 如果你正在使用Maven,你可以硬编码到目标文件夹的路径并使用它 - 因为它在每个`maven clean期间被清理 (2认同)

CPJ*_*CPJ 7

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