Чтобы протестировать желаемый блок кода, вам нужно заставить контроллер выдать исключение при вызове
return View("ExtraRun");
.
Это можно сделать путем насмешки над контроллером и переопределение функции View(string)
, то есть virtual
[Microsoft.AspNetCore.Mvc.NonAction]
public virtual Microsoft.AspNetCore.Mvc.ViewResult View (string viewName);
В следующем примере MOQ использовался для имитации контроллера и переопределения намеченной функции, так что Контроллер вел себя так, как ожидалось, когда проводился тест.
//Arrange
//...
var mock = new Mock<RunController>({inject dependencies here});
mock.CallBase = true;
var exception = new Exception("Sample message");
mock.Setup(_ => _.View(It.IsAny<string>())).Throws(exception);
RunController controller = mock.Object;
//Act
var actual = controller.GetExtraRun() as RedirectToActionResult;
//Assert
actual.Should().NotBeNull(); //FluentAssertions
//...perform desired assertions here
Обычно тестируемый объект не подвергается насмешке при юнит-тестировании. В этом случае, однако, требовалось вызвать участника внутри субъекта, который необходимо настроить так, чтобы он вел себя как нужно. Что можно сделать, переопределив его в производном классе. То же самое можно было бы сделать вручную без фальшивого фреймворка, но он упрощает настройку.