私は以下の定義でAsp.net Coreメソッドを持っています。Asun.netコアのIFormFileフィールドのxunitテスト
[HttpPost]
public IActionResult Upload(IFormFile file)
{
if (file == null || file.Length == 0)
throw new Exception("file should not be null");
var originalFileName = ContentDispositionHeaderValue
.Parse(file.ContentDisposition)
.FileName
.Trim('"');
file.SaveAs("your_file_full_address");
}
私はIFormFile
あざけることができるか、この機能のためのxUnitテストを作成したいですか?
更新:
コントローラー:
[HttpPost]
public async Task<ActionResult> Post(IFormFile file)
{
var path = Path.Combine(@"E:\path", file.FileName);
using (var stream = new FileStream(path, FileMode.Create))
{
await file.CopyToAsync(stream);
}
return Ok();
}
のxUnitテスト
[Fact]
public async void Test1()
{
var file = new Mock<IFormFile>();
var sourceImg = File.OpenRead(@"source image path");
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write(sourceImg);
writer.Flush();
stream.Position = 0;
var fileName = "QQ.png";
file.Setup(f => f.OpenReadStream()).Returns(stream);
file.Setup(f => f.FileName).Returns(fileName);
file.Setup(f => f.Length).Returns(stream.Length);
var controller = new ValuesController();
var inputFile = file.Object;
var result = await controller.Post(inputFile);
//Assert.IsAssignableFrom(result, typeof(IActionResult));
}
しかし、私は、ターゲットパスに空の画像を得ました。
可能にするために抽象化されなければなりませんか? 'Mock'?投稿する前に何を試しましたか? –
[ASP.NET Core 1 MVC 6のユニット/統合テスト用にIFormFileをモックする方法](https://stackoverflow.com/questions/36858542/how-to-mock-an-iformfile-for) -a-unit-integration-test-in-asp-net-core-1-mvc-6) – Nkosi
現在moqを試みていますが、コピーされたイメージは空です。私は元の投稿でさらに情報を追加します。 –