Я добавляю модульное тестирование в решение NerdDinner и столкнулся с этим.Я тестирую метод Edit POST, приведенный здесь:
[AcceptVerbs(HttpVerbs.Post), Authorize]
public virtual ActionResult Edit(int id, FormCollection formValues)
{
Dinner dinner = dinnerRepository.GetDinner( id );
if (!dinner.IsHostedBy(User.Identity.Name))
{
return View(Views.InvalidOwner);
}
try
{
UpdateModel(dinner);
dinnerRepository.Save();
//return RedirectToAction("Details", new { id = dinner.DinnerID });
return RedirectToAction(Actions.Details(dinner.DinnerID));
}
catch (Exception ex)
{
foreach (var issue in dinner.GetRuleViolations())
{
ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
}
return View(new DinnerFormViewModel(dinner));
}
}
Исключение System.TypeInitializationException выдается в строке «return RedirectToAction ...» и говорит: «Инициализатор типа для MVC» вызвал исключение. "
Когда я заменяю строку в кодировке T4MVC исходной строкой (закомментированной выше), я не получаю исключения.
Вот код модульного теста:
[TestMethod]
public void EditAction_Should_Redirect_When_Update_Successful()
{
// Arrange
var controller = CreateDinnersControllerAs("Some User");
var formValues = new FormCollection
{
{ "Title", "Another Value" },
{ "Description", "Another Description" }
};
controller.ValueProvider = formValues.ToValueProvider();
// Act
var result = controller.Edit(1, formValues) as RedirectToRouteResult;
// Assert
Assert.IsNotNull(result);
Assert.AreEqual("Details", result.RouteValues["Action"]);
}
У меня есть пара идей, из-за которых может быть выброшено это исключение, но я не достаточно уверен, чтобы утверждать здесь.Мне совершенно непонятно, как это исправить.
Идеи?
Дэйв