5
我想编写用于上传ASP.NET Core 1中的文件的测试,但似乎无法找到一种很好的方法来模拟/实例化从IFormFile派生的对象。 关于如何做到这一点的任何建议?如何在ASP.NET Core 1 MVC 6中模拟单元/集成测试的IFormFile?
谢谢。
我想编写用于上传ASP.NET Core 1中的文件的测试,但似乎无法找到一种很好的方法来模拟/实例化从IFormFile派生的对象。 关于如何做到这一点的任何建议?如何在ASP.NET Core 1 MVC 6中模拟单元/集成测试的IFormFile?
谢谢。
假设你有一个控制器如..
public class MyController : Controller {
public Task<IActionResult> UploadSingle(IFormFile file) {...}
}
...其中IFormFile.OpenReadStream()
与被测方法来访问。您可以使用Moq模拟框架来创建一个测试来模拟流数据。
[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));
}
}
@FreedomDeveloper设置模拟返回流'fileMock.Setup(_ => _.Length)的长度.Returns ms.Length)' – Nkosi
http://stackoverflow.com/help/how-to-ask – Kritner
欢迎来到堆栈溢出。你应该仔细阅读你迄今尝试过的[如何创建一个最小,完整和可验证的例子](http://stackoverflow.com/help/mcve)。这样人们可以用它来重现问题并给出更好的答案。 – Nkosi
你可以使用一个模拟框架来模拟接口并设置它以执行你喜欢的测试 – Nkosi