C# 在Web API中模拟FileStream构造函数

C# 在Web API中模拟FileStream构造函数,c#,rest,mocking,moq,mstest,C#,Rest,Mocking,Moq,Mstest,我的REST API的POST方法中包含以下代码: using (FileStream outputFile = new FileStream(Path.Combine(fileLocation, fileName), FileMode.OpenOrCreate)) 现在的问题是,我想模拟FileStream对象,但我不知道如何模拟,因为我无法通过构造函数注入对象。当我这样做时,会出现以下错误: System.InvalidOperationException:在尝试激活“webservice

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

using (FileStream outputFile = new FileStream(Path.Combine(fileLocation, fileName), FileMode.OpenOrCreate))
现在的问题是,我想模拟FileStream对象,但我不知道如何模拟,因为我无法通过构造函数注入对象。当我这样做时,会出现以下错误: System.InvalidOperationException:在尝试激活“webservice.Controller.DataController”时,无法解析类型为“System.IO.FileStream”的服务

我也不能为FileStream对象的构造函数添加抽象层


你们当中有谁对此有经验吗?如果有,你能帮助我吗?因为我在google上只能找到上述两种方法,很遗憾,我不愿意在单元测试时将文件写入我的文件系统,原因很明显。

如果您不想使用FileStream创建文件,那么您必须从控制器中删除此类。一种方法是创建一些类似于
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
            }
        }
    }
}
这样,您就可以轻松地将此帮助器注入控制器,然后对其进行模拟和测试