У меня есть контроллер, который реализует простую операцию Add на сущности и перенаправляет на страницу Details:
[HttpPost]
public ActionResult Add(Thing thing)
{
// ... do validation, db stuff ...
return this.RedirectToAction<c => c.Details(thing.Id));
}
Это отлично работает (используя RedirectToAction из сборки MvcContrib).
Когда я тестирую этот метод, я хочу получить доступ к представлению ViewData, которое возвращается из действия Details (так что я могу получить только что добавленный первичный ключ и доказать, что он теперь находится в базе данных).
Тест имеет:
var result = controller.Add(thing);
Но результат здесь имеет тип: System.Web.Mvc.RedirectToRouteResult
(который является System.Web.Mvc.ActionResult
). Он еще не выполнил метод Details.
Я пробовал называть ExecuteResult
на возвращенном объекте, проходящем в mocked up ControllerContext
, но структура была недовольна отсутствием деталей в издеваемом объекте.
Я мог бы попробовать заполнить детали и т.д., но тогда мой тестовый код намного длиннее кода, который я тестирую, и я чувствую, что мне нужны модульные тесты для модульных тестов!
Я что-то упустил в философии тестирования? Как проверить это действие, когда я не могу получить его возвращенное состояние?