以前,我有一个同步控制器操作方法,该方法使用行
进行单元测试ManageBillsViewModel result = controller.ManageBills(2).ViewData.Model as ManageBillsViewModel;
一切都很好。当action方法更改为异步Task<ViewResult>
方法时,上面的行已经破坏。
我认为我可以通过在
中添加.Result
来实现它
ManageBillsViewModel result = controller.ManageBills(2).Result.ViewData.Model as ManageBillsViewModel;
但这不起作用。
如何正确访问异步方法的ViewData.Model
?
答案 0 :(得分:1)
使代码完全异步,并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()
等来电会导致死锁,应该避免
答案 1 :(得分:0)
异步方法返回任务,可以使用
var task = controller.ManageBills(2);
task.Wait();
var result = task.Result;
或
var result = await controller.ManageBills(2);