У меня есть контроллер, который реализует простую операцию добавления на объекте и перенаправляет на страницу сведений:
[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
для возвращаемого объекта, передаваемого в макете ControllerContext
, но фреймворк не был доволен отсутствием детализации в макете объекта.
Я мог бы попытаться заполнить детали, и т. Д., И т. Д., Но тогда мой тестовый код намного длиннее, чем код, который я тестирую, и я чувствую, что мне нужны юнит-тесты для юнит-тестов!
Я что-то упустил в философии тестирования? Как проверить это действие, если я не могу получить его возвращенное состояние?