0
을 사용하여 정확한 결과를 반환 할 수UpdateModel 나는 두 시험 방법은 제어기에 호출이 모의 형태 컬렉션 값
[Test]
public void EditAction_Should_Redisplay_With_Errors_When_Update_Fails()
{
// Arrange
var controller = CreatePaperControllerAs("SomeUser");
int id = 1;
FormCollection formValues = new FormCollection() {
{ "IM_Paper.Year","xxx"}
};
controller.ValueProvider = formValues.ToValueProvider();
// Act
var result = controller.Edit(id, formValues) as ViewResult;
// Assert
Assert.IsNotNull(result, "Expected redisplay of view");
Assert.IsTrue(result.ViewData.ModelState.IsValid, "Expected Errors");
}
컨트롤러의 작업 결과는
[HttpPost, Authorize]
public ActionResult Edit(int id, FormCollection collection)
{
IM_Paper paper = _paperRepository.GetPaperById(id);
if (!paper.IsPostedByUser(User.Identity.Name))
return View("InvalidOwner");
try
{
UpdateModel(paper, "IM_Paper");
_paperRepository.Save();
return RedirectToAction("Details", new { id = paper.PaperId });
}
catch
{
return View(paper);
}
}
입니다.
그러나 try-catch 블록은 예외를 catch하지 않습니다 ("IM_Paper.Year"는 int 여야 함). 따라서 컨트롤러는 항상 Action 결과를 RedirectToAction으로 반환합니다. 첫 번째 경우에도 메모리 내 데이터는 변경되지 않았습니다.
이유가 궁금하십니까? "IM_Paper"클래스의 경우, POCO 생성기를 사용하고 엔티티 프레임 워크에서 생성했습니다. 클래스는 다음과 같습니다 :
public partial class IM_Paper
{
#region Primitive Properties
public virtual int PaperId
{get;set;}
public virtual string Author
{get;set;}
public virtual Nullable<int> Year
{get;set;
} ...