单元测试任务

问题描述 投票:1回答:2

以前,我有一个同步控制器动作方法,该方法对该行进行了单元测试

ManageBillsViewModel result = controller.ManageBills(2).ViewData.Model as ManageBillsViewModel;

一切都很好。当动作方法改为异步Task<ViewResult>方法时,上面的行就破了。

我想我可以通过添加.Result来实现它

ManageBillsViewModel result = controller.ManageBills(2).Result.ViewData.Model as ManageBillsViewModel;

但这没用。

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

c# asp.net-mvc unit-testing xunit
2个回答
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()这样的调用会导致死锁,应该避免


0
投票

异步方法返回任务,可以使用

var task = controller.ManageBills(2);
task.Wait();
var result = task.Result;

要么

var result = await controller.ManageBills(2);
© www.soinside.com 2019 - 2024. All rights reserved.