在Web API中模拟FileStream构造函数

时间:2019-12-18 15:28:42

标签: c# rest mocking moq mstest

我的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上找到,而出于明显的原因,我宁愿不在单元测试中将文件写入文件系统中。

1 个答案:

答案 0 :(得分:1)

如果不想使用FileStream创建文件,则必须从Controller中删除此类。一种方法是使用诸如以下的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
            }
        }
    }
}

比起您可以轻松地将此辅助程序注入您的控制器,然后对其进行模拟和测试。