首页 > 解决方案 > Java中是否有一个对di友好的文件管理库?

问题描述

我已经使用这个库来处理文件,但现在我想编写简单的单元测试。

问题:文件类是静态最终的,方法是静态的,所以 - 是不可模拟的。对我来说这很令人沮丧,因为我现在需要实际测试文件系统并实际测试结果,而我真正需要做的只是模拟方法。当您需要实际使用环境时,并不是真正的单元测试。

现在代码的示例代码:

public class MyClass
{
    public void myMethod(File myFile) throws IOException
    {
        Files.move(myFile.toPath(), myFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
    }
}

我希望代码是这样的:

public class MyClass
{
    private final Files files;

    public MyClass(Files files)
    {
        this.files = files;
    }

    public void myMethod(File myFile) throws IOException
    {
        this.files.move(myFile.toPath(), myFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
    }
}

所以我需要的是一个与 "Files" 功能相同但可注入的类

标签: javadependency-injectionfilesystems

解决方案


底层java.nio.Filesystem允许通过实现自定义来使用替代文件系统java.nio.FilesystemProvider

谷歌的JimFS就是这样一种 InMemory 文件系统的实现,它可以很好地用于测试目的,只要你远离java.io.File类(不支持)

另一种选择是使用在本地文件系统上运行的测试工具,例如 JUnit 4sTemporaryFolder规则

@Rule
public TemporaryFolder temp = new TemporaryFolder()

您可以在此文件夹中创建文件,测试您的移动操作。该规则确保在测试完成后关闭文件夹。


推荐阅读