在多个地方使用最小起订量对象的单元测试中出现SystemObjectDisposeException

问题描述 投票:0回答:1

我在我的测试代码中模拟了一个对象,如下所示-

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_))
但没有任何效果。

c# .net unit-testing moq
1个回答
0
投票

如果您已经尝试使用删除但没有成功, 您可以尝试多次模拟它吗,如下所示:

storageManager.SetupSequence(_ => _.GetFileStreamAsync(It.IsAny<string>()))
.Returns(() => Task.FromResult(stream_));  //Returned in the first call
.Returns(() => Task.FromResult(stream_)); //Returned in the second call
© www.soinside.com 2019 - 2024. All rights reserved.