我在我的测试代码中模拟了一个对象,如下所示-
storageManager
.Setup(m => m.GetFileStreamAsync(It.IsAny<string>()))
.Returns(() => Task.FromResult(stream_));
BulkExcelProcessorCommandHandler handler = new BulkExcelProcessorCommandHandler(storageManager)
它接受一个字符串并返回数据流。
public async Task<Stream> GetFileStreamAsync(string fileName)
{
return await Task.FromResult(new MemoryStream(Convert.FromBase64String(fileName)));
}
这在我的代码中用作 2 个位置 -
public BulkExcelProcessorCommandHandler(IAzureStorageService storageManager)
{
_storageManager= storageManager;
}
public async Task<bool> Handle(BulkExcelProcessorCommand request)
{
using var file = await _storageManager.GetFileStreamAsync(fileUpload.FileContent);
await SaveReportWithResponse(fileUpload.FileContent)
}
private async Task SaveReportWithResponse(fileUpload.FileContent)
{
var filestream = await _storageManager.GetFileStreamAsync(fileUpload.FileContent);
}
这是第一个使用它的实例(
Handle()
)我发现它工作得很好。然而 SaveReportWithResponse()
中的那个抛出异常 SystemObjectDisposedException
我知道这可能是因为该对象已被处置,但我如何确保该对象在整个测试中保持完好无损。我已经尝试了 stackoverflow 中的多种解决方案,删除了
using
中的 Handle()
部分或使用 Returns(() => Task.FromResult(stream_))
但没有任何效果。
如果您已经尝试使用删除但没有成功, 您可以尝试多次模拟它吗,如下所示:
storageManager.SetupSequence(_ => _.GetFileStreamAsync(It.IsAny<string>()))
.Returns(() => Task.FromResult(stream_)); //Returned in the first call
.Returns(() => Task.FromResult(stream_)); //Returned in the second call