IFormFileのリストを自分の任意のデータベースファイルクラスのリストに変換する非同期関数の単体テストに取り組んでいます。c#mocking IFormFile CopyToAsync()メソッド
バイト配列にファイルデータを変換する方法であって、それはmockableなるよう
internal async Task<List<File>> ConvertFormFilesToFiles(ICollection<IFormFile> formFiles)
{
var file = new File
{
InsertDateTime = DateTime.Now,
LastChangeDateTime = DateTime.Now
};
if (formFile.Length > 0)
{
using (var memoryStream = new MemoryStream())
{
await formFile.CopyToAsync(memoryStream, CancellationToken.None);
file.FileData = memoryStream.ToArray();
}
}
// ...
}
関数はIFormFilesのいるICollectionを受信します。今の
私はこのようなテストコードしている:関数は、新しい空のMemoryStream(私はこれが必要なのかはわからない)とCopyToAsyncメソッドを呼び出すため
//Arrange
var fileConverter = new FilesConverter();
using (var fileStream = new FileStream("Files/uploadme.txt", FileMode.Open, FileAccess.Read))
{
using (var memoryStream = new MemoryStream())
{
var newMemoryStream = new MemoryStream();
fileStream.CopyTo(memoryStream);
FormFileMock.Setup(f => f.CopyToAsync(newMemoryStream, CancellationToken.None)).Returns(Task.CompletedTask);
// some other setups
//Act
var result = await fileConverter.ConvertFormFilesToFiles(new List<IFormFile> { FormFileMock.Object });
//Assert
Assert.IsTrue(result.Any());
}
}
newMemoryStream変数が作成されます。
問題は、がformFile.CopyToAsync(memoryStream、CancellationToken.None)を待つことです。はmemoryStreamにデータをコピーしません。
質問を再確認し、[mcve]であることを確認してください。いくつかのタイプミスがあります。 – Nkosi
また、あなたの設定に従って。何も実際にコピーされません。完了した状態に戻るようにコールを設定するだけです。実際の機能は実装されていません。戻る前に、いくつかの機能を実行するためにコールバックを追加する必要があります。 – Nkosi
@ Nkosiコードを最小限にするためにコードを削除しました。これは良いですか? – Jeroen