对任务进行单元测试<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);