单元测试任务<viewresult>

时间:2018-03-05 00:17:18

标签: c# asp.net-mvc unit-testing xunit

以前,我有一个同步控制器操作方法,该方法使用行

进行单元测试
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

2 个答案:

答案 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);