Asp.net mvc 5 测试异步mvc5控制器时,nunit测试未完成(vs 2015)

Asp.net mvc 5 测试异步mvc5控制器时,nunit测试未完成(vs 2015),asp.net-mvc-5,visual-studio-2015,async-await,nunit-3.0,resharper-10.0,Asp.net Mvc 5,Visual Studio 2015,Async Await,Nunit 3.0,Resharper 10.0,我有一个MVC5控制器,它使用一些异步数据访问代码。我用nUnit编写了一个简单的测试。测试没有完成,它只是旋转直到我取消它。好的,我已经正确设置了测试;它正在等待控制器操作标记为async并返回任务。我错过什么了吗?有趣的是,当我使用moq模拟依赖项时,测试是有效的,但是如果我使用实际的依赖项进行集成测试,它将永远旋转 这是一个简化的测试: [Test] public async Task Get_WhenProductHasData_ReturnsView() {

我有一个MVC5控制器,它使用一些异步数据访问代码。我用nUnit编写了一个简单的测试。测试没有完成,它只是旋转直到我取消它。好的,我已经正确设置了测试;它正在等待控制器操作标记为async并返回任务。我错过什么了吗?有趣的是,当我使用moq模拟依赖项时,测试是有效的,但是如果我使用实际的依赖项进行集成测试,它将永远旋转

这是一个简化的测试:

[Test]
    public async Task Get_WhenProductHasData_ReturnsView()
    {
        // Arrange
        ...

        // Act
        PartialViewResult actualResult = await _controller.Widget(_productId1) as PartialViewResult;


        // Assert
        Assert.That(actualResult, Is.Not.Null);
...
    }
这是简化的控制器

 public async Task<ActionResult> Widget(string productId)
    {

        ProductStats stats = await _statsService.GetProductStatsAsync(productId);


        return PartialView(stats);
    }
公共异步任务小部件(字符串productId)
{
ProductStats=await\u statsService.GetProductStatsAsync(productId);
返回PartialView(统计数据);
}
试试这个:

[Test]
public async Task Get_WhenProductHasData_ReturnsView()
{
    // Arrange
    ...

    // Act
    var result = await _controller.Widget(_productId1);


    // Assert
    Assert.That(result as PartialViewResult, Is.Not.Null);
}

请注意,“Act”行只是
等待
,然后将结果转换为
断言上的
PartialViewResult
。如果该行为
null
或不是
PartialViewResult
类型,它将返回
null
。无论哪种方式,您都可以得到您想要的。

您必须指定希望等待的任务作为PartialViewResult返回,而不是任务本身,请注意添加的括号<代码>PartialViewResult actualResult=(等待_controller.Widget(_productId1))作为PartialViewResult谢谢你的回复。但那没用。仍然只是旋转。。。