nUnit 测试在测试异步 MVC5 控制器时未完成 (与 2015 相比)



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

试试这个:

[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,然后将结果转换为Assert.That行上的PartialViewResult,如果它是null或不是PartialViewResult类型,它将返回null。无论哪种方式,您都可以得到所需的内容。

最新更新