ASP.NET Core 1でファイルをアップロードするためのテストを作成したいが、IFormFileから派生したオブジェクトを模擬したりインスタンス化したりするには良い方法が見つからないようだ。 これを行う方法に関するご提案はありますか?ASP.NET Core 1 MVC 6のユニット/統合テスト用にIFormFileをモックする方法は?
ありがとうございました。
ASP.NET Core 1でファイルをアップロードするためのテストを作成したいが、IFormFileから派生したオブジェクトを模擬したりインスタンス化したりするには良い方法が見つからないようだ。 これを行う方法に関するご提案はありますか?ASP.NET Core 1 MVC 6のユニット/統合テスト用にIFormFileをモックする方法は?
ありがとうございました。
..あなたのようなコントローラーを持っているIFormFile.OpenReadStream()
がテスト対象のメソッドでアクセスされ
public class MyController : Controller {
public Task<IActionResult> UploadSingle(IFormFile file) {...}
}
を...と仮定。 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