为什么C# System.IO.Abstractions库代码会向磁盘写入数据?
问题原因说明
- 你对System.IO.Abstractions库的功能定位存在误解:该库的核心作用是为.NET原生System.IO操作提供抽象接口层,方便单元测试时替换IO实现,本身并不默认使用内存IO。
- 只有配套测试辅助包中的
MockFileSystem实现才是完全基于内存、不会操作磁盘的;该库默认提供的FileSystem实现是对原生System.IO的封装,调用相关方法会真实读写磁盘。 - 你代码运行时写入磁盘的核心原因是:注入到
Settings类中的IFileSystem实例是默认的真实文件系统实现,而非内存模拟实现。
适配方案
如果是单元测试场景需要避免操作磁盘,注入内存模拟的MockFileSystem实例即可,参考用法:
using System.IO.Abstractions.TestingHelpers; // 初始化内存模拟文件系统 var mockFileSystem = new MockFileSystem(); // 注入模拟实例到Settings类 var settings = new Settings(mockFileSystem); // 调用Update方法,数据仅写入内存,不会落盘 settings.Update();
如果是生产环境需要真实写入磁盘,当前的逻辑是符合预期的,无需调整。
内容的提问来源于stack exchange,提问作者Luis Hernandez
相关产品推荐
相关产品推荐

