在 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
}
}
}
}
比起你可以轻松地将这个助手注入你的控制器,然后模拟它并进行测试。
我的 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
}
}
}
}
比起你可以轻松地将这个助手注入你的控制器,然后模拟它并进行测试。