如何模拟要修改的根文件夹中的文件



出于某种原因,我有一个路径(//what/ever(存储在修改文件的类的私有变量中。因此,当我测试它时,它会尝试修改文件,但是,由于该文件不存在,因此会引发异常。

当然,对于单元测试,我不想在文件系统中创建该文件。

有没有办法模拟那个文件并强制机器写入//my/folder 而不是//what/ever?

模拟文件本身可能很困难。除非您将文件处理抽象到您管理的某个接口中,并且可以在测试运行期间注入模拟实现。另一种方法是公开文件路径,以便可以将其作为测试设置代码的一部分进行更改。

另一种方法涉及JUnit 4。在 JUnit 4 中,您可以在测试运行中管理临时文件和文件夹。它将清理您创建的任何新文件或文件夹。

可以这样完成:

public class MyFileTest {
    @Rule
    public TemporaryFolder testFolder = new TemporaryFolder();
    @Test
    public void testSomething() throws IOException {
        File tempFile = testFolder.newFile("myfile");

我认为这样的东西将允许您创建实际文件,以便您的代码可以修改它,从而不会爆炸。您可能需要从以下方面准确考虑测试范围:

  • 你到底想测试什么?
  • 是否将正确的内容写入了文件?
  • 是文件本身被修改了吗?
  • 等。

回答其中一些问题可能会使您朝着正确的方向前进,即您应该编写哪种测试以及可能需要执行哪些重构以促进测试需求。

最新更新