0

У меня есть контроллер mvc 5, который использует некоторый код доступа к асинхронному доступу. Я написал простой тест, используя nUnit. Тест не завершается, он просто вращается, пока я его не отменил. afaik, я правильно настроил тест; он ожидает, что действие контроллера помечено как асинхронное и возвращает задачу. Я что-то упускаю? Интересно, что тест работает, когда я изворачиваю зависимости с помощью moq, но если я иду на интеграционный тест с фактическими зависимостями на месте, он просто вращается навсегда.Тесты nunit не завершаются при тестировании контроллера async mvc5 (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

Спасибо за ответ Igor. Однако это не сработало. Все еще спины ... – 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 и результат затем отливается как PartialViewResult по линии Assert.That, если это было null или нет PartialViewResult тип он бы вернулся null. В любом случае вы получаете то, что ищете.