2011-03-24 43 views
0

返回一个正确的结果,我有两个测试方法调用到控制器:
这其中传递:的UpdateModel不能使用模拟形式的收藏价值

[Test] 
    public void EditAction_Should_Redirect_When_Update_Successful() 
    { 

     // Arrange 
     var controller = CreatePaperControllerAs("SomeUser"); 
     const int id = 2; 

     FormCollection formValues = new FormCollection() { 
      { "IM_Paper.Title", "Another value" }, 
      { "IM_Paper.Abstract", "Another description" } 
     }; 

     controller.ValueProvider = formValues.ToValueProvider(); 

     // Act 
     var result = controller.Edit(id, formValues) as RedirectToRouteResult; 

     // Assert 
     Assert.AreEqual("Details", result.RouteValues["Action"]); 
     Assert.AreEqual(id, result.RouteValues["id"]); 
    } 

这一次失败:

[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块永远不会捕获异常(“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; 
    } ... 

回答

0

找到了答案,我没有将属性绑定到IM_Paper类。