Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元测试任务<;ViewResult>;_C#_Asp.net Mvc_Unit Testing_Xunit - Fatal编程技术网

C# 单元测试任务<;ViewResult>;

C# 单元测试任务<;ViewResult>;,c#,asp.net-mvc,unit-testing,xunit,C#,Asp.net Mvc,Unit Testing,Xunit,以前,我有一个同步控制器动作方法,它有一个单元测试 ManageBillsViewModel result = controller.ManageBills(2).ViewData.Model as ManageBillsViewModel; 一切都很好。当操作方法更改为异步Task方法时,上述行中断 我想我可以通过添加.Result使其工作,如中所示 ManageBillsViewModel result = controller.ManageBills(2).Result.ViewData

以前,我有一个同步控制器动作方法,它有一个单元测试

ManageBillsViewModel result = controller.ManageBills(2).ViewData.Model as ManageBillsViewModel;
一切都很好。当操作方法更改为异步
Task
方法时,上述行中断

我想我可以通过添加
.Result
使其工作,如中所示

ManageBillsViewModel result = controller.ManageBills(2).Result.ViewData.Model as ManageBillsViewModel;
但这并不奏效


如何正确访问异步方法的
ViewData.Model

使代码始终异步,并等待调用控制器操作返回的
任务。该测试还需要进行异步

[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);