对任务进行单元测试<ViewResult>
Unit Testing a Task<ViewResult>
以前,我有一个同步控制器动作方法,它有一个单元测试行
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
?
使代码一直异步,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()
这样的阻塞调用会导致死锁,应该避免
异步方法return任务,可以使用
var task = controller.ManageBills(2);
task.Wait();
var result = task.Result;
或
var result = await controller.ManageBills(2);
以前,我有一个同步控制器动作方法,它有一个单元测试行
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
?
使代码一直异步,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()
这样的阻塞调用会导致死锁,应该避免
异步方法return任务,可以使用
var task = controller.ManageBills(2);
task.Wait();
var result = task.Result;
或
var result = await controller.ManageBills(2);