0

我有一個使用一些異步數據訪問代碼的mvc 5控制器。我已經使用nUnit編寫了一個簡單的測試。測試沒有完成,它只是旋轉,直到我取消它。 afaik我已經正確設置了測試;它正在等待控制器操作被標記爲異步並返回一個任務。我錯過了什麼嗎?有趣的是,當我使用moq嘲笑依賴關係時,這個測試是有效的,但是如果我去實際的依賴項進行集成測試,它就會永遠旋轉。當測試異步mvc5控制器時,nunit測試不完成(vs 2015)

的一個簡化的測試:

[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); 
    } 
+0

您必須指定您希望等待的任務作爲PartialViewResult返回,而不是任務本身,請注意添加的括號。 'PartialViewResult actualResult =(等待_controller.Widget(_productId1))作爲PartialViewResult;' – Igor

+0

感謝您的答覆伊戈爾。但這並不奏效。仍然只是旋轉... – MarcusP

回答

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

注意, 「法案」 行簡直是awaiting和然後將結果作爲PartialViewResultAssert.That行上投射,如果是null或者不是PartialViewResult則返回null。無論哪種方式,你得到你要的東西。