java - 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" 功能相同但可注入的类
解决方案
底层java.nio.Filesystem
允许通过实现自定义来使用替代文件系统java.nio.FilesystemProvider
谷歌的JimFS就是这样一种 InMemory 文件系统的实现,它可以很好地用于测试目的,只要你远离java.io.File
类(不支持)
另一种选择是使用在本地文件系统上运行的测试工具,例如 JUnit 4sTemporaryFolder
规则
@Rule
public TemporaryFolder temp = new TemporaryFolder()
您可以在此文件夹中创建文件,测试您的移动操作。该规则确保在测试完成后关闭文件夹。
推荐阅读
- c++ - string to double 或 float 截断小数点
- php - .htaccess 重写会留下损坏的图像
- python - PyQt4:如何使文件对话框弹出并停留?
- c# - 密封类的类实例化的依赖注入
- javascript - 如何在后台获取 YouTube 网址?
- c-strings - 为什么我必须在 C++ 中包含 .c_str() 来查找字符串长度?
- c# - 在 Rider 中的方法参数后禁用换行符
- c# - 自定义数据库连接对象:我应该使用一个通用的(单例)还是每个对象实例一个?
- node.js - 为克隆的 React Web 应用运行“npm install”时出现错误 403 MCPMediaTypeBlocked: acorn@3.3.0
- python - Python - 更改底部值的格式以显示月份