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