以前,我有一个同步控制器动作方法,该方法对该行进行了单元测试
ManageBillsViewModel result = controller.ManageBills(2).ViewData.Model as ManageBillsViewModel;
一切都很好。当动作方法改为异步Task<ViewResult>
方法时,上面的行就破了。
我想我可以通过添加.Result
来实现它
ManageBillsViewModel result = controller.ManageBills(2).Result.ViewData.Model as ManageBillsViewModel;
但这没用。
如何正确访问异步方法的ViewData.Model
?
使代码异步一直向下,await
从调用控制器动作返回的Task<ViewResult>
。测试也需要异步。
[Fact]
public async Task MyTestMethod() {
//...
//Act
var viewResult = await controller.ManageBills(2);
ManageBillsViewModel result = viewResult.ViewData.Model as ManageBillsViewModel;
//Assert
//...
}
阻止像.Result
和.Wait()
这样的调用会导致死锁,应该避免
异步方法返回任务,可以使用
var task = controller.ManageBills(2);
task.Wait();
var result = task.Result;
要么
var result = await controller.ManageBills(2);