How to mock an IFormFile for a unit/integration test in ASP.NET Core 1 MVC 6?

匿名 (未验证) 提交于 2019-12-03 01:12:01

问题:

I want to write tests for uploading of files in ASP.NET Core 1 but can't seem to find a nice way to mock/instanciate an object derived from IFormFile. Any suggestions on how to do this?

Thanks.

回答1:

Assuming you have a Controller like..

public class MyController : Controller {     public Task<IActionResult> UploadSingle(IFormFile file) {...} } 

...where the IFormFile.OpenReadStream() is accessed with the method under test. You can create a test using Moq mocking framework to simulate the stream data.

[TestClass] public class IFormFileUnitTests {     [TestMethod]     public async Task Should_Upload_Single_File() {         //Arrange         var fileMock = new Mock<IFormFile>();         //Setup mock file using a memory stream         var content = "Hello World from a Fake File";         var fileName = "test.pdf";         var ms = new MemoryStream();         var writer = new StreamWriter(ms);         writer.Write(content);         writer.Flush();         ms.Position = 0;         fileMock.Setup(_ => _.OpenReadStream()).Returns(ms);         fileMock.Setup(_ => _.FileName).Returns(fileName);         fileMock.Setup(_ => _.Length).Returns(ms.Length);          var sut = new MyController();         var file = fileMock.Object;          //Act         var result = await sut.UploadSingle(file);          //Assert         Assert.IsInstanceOfType(result, typeof(IActionResult));     } } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!