在 Web 中模拟 FileStream 构造函数 API

Mocking a FileStream constructor within a Web API

我的 REST API 的 POST 方法中有以下代码:

using (FileStream outputFile = new FileStream(Path.Combine(fileLocation, fileName), FileMode.OpenOrCreate))

现在的问题是我想模拟 FileStream 对象,但我不知道如何模拟,因为我无法通过我的构造函数注入该对象。当我这样做时,出现以下错误: System.InvalidOperationException: 尝试激活 'webservice.Controllers.DataController'.

时无法解析类型 'System.IO.FileStream' 的服务

我也无法为 FileStream 对象的构造函数添加抽象层。

你们有没有这方面的经验,如果有,可以帮助我吗?因为上面的两种方法是我在 google 上所能找到的所有方法,而且出于显而易见的原因,我宁愿不在单元测试时将文件写入我的文件系统。

如果您不想使用 FileStream 创建文件,则必须从您的控制器中删除此 class。一种方法是创建类似 IFileSystemHelper 的东西,例如使用 SaveFileData 方法,如下所示:

namespace MyNamespace
{
    using System.IO;

    public interface IFileSystemHelper
    {
        void SaveFileData(string fileLocation, string fileName);
    }

    public class FileSystemHelper : IFileSystemHelper
    {
        public void SaveFileData(string fileLocation, string fileName)
        {
            using (FileStream outputFile = new FileStream(Path.Combine(fileLocation, fileName), FileMode.OpenOrCreate))
            {
                // TODO: Save file
            }
        }
    }
}

比起你可以轻松地将这个助手注入你的控制器,然后模拟它并进行测试。