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);
    }
4

1 回答 1

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

请注意,“Act”行很简单awaiting,然后将结果转换为 aPartialViewResultAssert.That,如果它是null或不是一个PartialViewResult类型,它将返回null。无论哪种方式,你都会得到你想要的。

于 2016-03-14T19:14:31.270 回答