我有一个类对磁盘上的文件进行操作。 更确切地说,它遍历一个目录,读取具有给定后缀的所有文件 并对数据执行一些操作,然后将它们输出到新文件。
我对如何为这门课程设计单元测试表示怀疑。 我想安装方法在/ tmp / somefolder中创建临时目录和临时文件,但我怀疑这是一个坏主意,原因有两个(开发人员使用Windows,文件权限等)。
另一个想法是模拟我用来编写和读取磁盘的类,通过使用接口封装类然后提供模拟对象,但它看起来有点乱。
解决此类问题的标准方法是什么?
答案 0 :(得分:11)
如果使用JUnit 4.7及更高版本,您可以使用@TemporaryFolder
规则透明地获取一个临时文件夹,该文件夹应在每次测试后自动清除。
答案 1 :(得分:9)
你的策略是正确的,IMO。请确保不要对临时目录进行硬编码。使用System.getProperty("java.io.tmpdir")
获取临时目录的路径,并在测试完成后使用测试中的finally块或@After
方法清除创建的文件和目录。
答案 2 :(得分:7)
嘲笑一切都是可能的,但可能比它的价值更多的努力。您可以使用Java System.getProperty(“java.io.tmpdir”)提供的临时目录,无论您使用哪个系统,都应该能够写入该目录。坚持使用短文件名,即使在古老的东西上运行,你也会安全。