如何在ASP.NET Core 1 MVC 6中为单元/集成测试模拟IFormFile?

我想编写用于在ASP.NET Core 1中上传文件的测试,但似乎找不到一种模拟/实例化从IFormFile派生的对象的好方法。 有关如何做到这一点的任何建议?

谢谢。

假设你有一个类似的控制器..

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

…使用IFormFile.OpenReadStream()方法访问IFormFile.OpenReadStream()位置。 您可以使用Moq模拟框架创建测试来模拟流数据。

 [TestClass] public class IFormFileUnitTests { [TestMethod] public async Task Should_Upload_Single_File() { //Arrange var fileMock = new Mock(); //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)); } }