测试异步mvc5控制器时,nunit测试无法完成(vs 2015)

时间:2016-03-14 00:48:47

标签: asp.net-mvc-5 visual-studio-2015 async-await nunit-3.0 resharper-10.0

我有一个mvc 5控制器,它使用了一些异步数据访问代码。我用nUnit编写了一个简单的测试。测试没有完成,只是旋转直到我取消它。 afaik我已正确设置测试;等待控制器操作被标记为异步并返回任务。我错过了什么吗?有趣的是,当我使用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);
    }

1 个答案:

答案 0 :(得分:0)

请改为尝试:

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

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


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

请注意&#34;法案&#34;该行只是awaiting,然后在PartialViewResult行上将结果转换为Assert.That,如果它是null或不是PartialViewResult类型,它将返回null。无论哪种方式,你都能得到你正在寻找的东西。