Kas*_*r P 19 c# asp.net unit-testing asp.net-core-mvc
我想编写用于在ASP.NET Core 1中上传文件的测试,但似乎找不到一种模拟/实例化从IFormFile派生的对象的好方法.有关如何做到这一点的任何建议?
谢谢.
Nko*_*osi 39
假设你有一个类似的控制器..
public class MyController : Controller {
public Task<IActionResult> UploadSingle(IFormFile file) {...}
}
Run Code Online (Sandbox Code Playgroud)
... 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));
}
}
Run Code Online (Sandbox Code Playgroud)
Ras*_*ing 16
添加带有固定长度的 harishr 答案(这是我的 Blob.Upload() 工作所需的)。
private IFormFile CreateTestFormFile(string p_Name, string p_Content)
{
byte[] s_Bytes = Encoding.UTF8.GetBytes(p_Content);
return new FormFile(
baseStream: new MemoryStream(s_Bytes),
baseStreamOffset: 0,
length: s_Bytes.Length,
name: "Data",
fileName: p_Name
);
}
Run Code Online (Sandbox Code Playgroud)
为什么不创建实际的内存中实例
IFormFile file = new FormFile(new MemoryStream(Encoding.UTF8.GetBytes("This is a dummy file")), 0, 0, "Data", "dummy.txt");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9718 次 |
| 最近记录: |