【问题标题】:C# Unit Test How to mocK IFormFileCollection?C#单元测试如何模拟IFormFileCollection?
【发布时间】:2022-01-26 11:48:59
【问题描述】:

我有一个使用 IFormFileCollection 的方法,我想对其进行单元测试。

我的方法:

public IActionResultUploadBankAccount(){

 IFormFileCollection files = Request.Form.Files;
                if (!files.Any()) return Ok(new GeneralDto.Response("Check your files!"));
 // and my codes

}

还有我的授权码:

MockAuthorize.cs:

public static void Authorize(this ControllerBase controller,....){

//my codes
 var bytes = Encoding.UTF8.GetBytes("This is a text file");
            IFormFile file = new FormFile(new MemoryStream(bytes), 0, bytes.Length, "Data", @"\Mock\Images\testFile.jpg");


}

当我尝试测试它时,方法会抛出错误:

System.NullReferenceException : 对象引用未设置为对象的实例。

我做错了什么?或者有什么方法可以测试 FormFileCollection?

【问题讨论】:

  • 不需要模拟它,因为一个简单的默认实现already exists。这很可能是XY problem。您需要显示实际导致问题的代码,以便我们为您提供相应的帮助

标签: c# unit-testing mocking iformfile


【解决方案1】:

由于FormFileCollection 是.NET 的一部分,您不应该对其进行测试。 Microsoft 将对此功能进行测试。

你应该测试的只是你自己的逻辑。

为了模拟IFormFileCollection,我会使用Moq 之类的模拟框架并执行类似的操作

private Mock<IFormFileCollection> _formFileCollectionMock;
private IClassToTest _sut;

public YourConstructor()
{
    _formFileCollectionMock= new Mock<IFormFileCollection>();
    _sut = new ClassToTest(_formFileCollectionMock.Object);
}

【讨论】:

    猜你喜欢
    • 2011-04-11
    • 2021-12-08
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    相关资源
    最近更新 更多