我有一个 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
。无论哪种方式,您都可以得到所需的内容。