如何解决动态调用异步方法
我需要编写测试来验证多个 ASP.NET Core 路由是否下载了一个 Excel 电子表格。所以到目前为止我有这个:
private async Task VerifyExcelIsDownloaded(Expression<Action<IReportRepository>> repoCall)
{
// Arrange
var mock = new Mock<IReportRepository>();
mock.Setup(repoCall);
var controller = new ReportController(mock.Object);
// Act
var result = await controller.GetBadgeReadersDownloadAsync();
// Assert
Assert.IsType<FileStreamResult>(result);
var file = result as FileStreamResult;
Assert.Equal("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",file.ContentType);
}
我已经通过表达式参数处理了存储库调用,但是对于“行为”部分,我不知道如何替换 GetBadgeReadersDownloadAsync
。我还需要将该方法调用传递到帮助方法中。
理想情况下,我最终会像这样进行多次测试:
[Fact]
public async Task GetBadgeReadersDownloadAsync_DownloadsExcel()
{
Expression<Action<IReportRepository>> repoCall = x => x.GetBadgeReadersForBarcodesAsync();
var controllerMethod = nameof(ReportController.GetBadgeReadersDownloadAsync);
await VerifyExcelIsDownloaded(repoCall,controllerMethod);
}
解决方法
原始海报(在问题下方的评论中)接受的答案是使用一个函数,该函数接受一个控制器并返回一个任务并将此函数与表达式一起传递给测试方法:
public async Task Verify...( Expression... repoCall,Func<Controller,Task<ActionResult>> actFunc )
测试方法创建一个控制器并将其传递给此函数,该函数在此处执行实际工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。