2011-11-14 47 views
1

我有測試類,它使用UpdateModel()方法的問題。 我得到System.NullReferenceException。 我使用NUnit。 這是我從HomeController的方法:NUnit - UpdateModel問題:NullReferenceException

public ActionResult ProjectsEdit(Projects model) 
    { 
     var projects = db.Projects.First(); 
     projects.Content = model.Content; 
     UpdateModel(projects); 
     db.SaveChanges(); 
     return RedirectToAction("Projects");    
    } 

下面是測試類:

[Test] 
    public void ProjectsEditPostTest() 
    { 
     var routeData = new RouteData(); 
     var httpContext = MockRepository.GenerateStub<HttpContextBase>(); 
     //var httpContext = new FakeHttpContext("Edit"); 
     FormCollection formParameters = new FormCollection(); 
     ControllerContext controllerContext = 
     MockRepository.GenerateStub<ControllerContext>(httpContext, 
                  routeData, 
                  controller); 
     controller.ControllerContext = controllerContext; 

     // Act 
     string newContent = "new content"; 
     Projects projects = new Projects { ID = 1, Content = newContent }; 
     controller.ProjectsEdit(projects); 

     // Assert 
     Assert.AreEqual(newContent, controller.db.Projects.First().Content);    
    } 

我應該怎麼做才能讓它的工作原理?

+0

什麼行代碼會拋出異常? – esskar

+0

UpdateModel(projects); //從HomeController 和 controller.ProjectsEdit(projects); //從HomeControllerTest –

回答

4

只需添加在斷言相下列行:

controller.ValueProvider = formParameters.ToValueProvider(); 

它分配一個值提供到其上UpdateModel方法依賴控制器。此值提供程序與您已定義的FormCollection變量關聯,並允許您傳遞一些值。

您也可以檢查similar answer,它使用MvcContrib.TestHelper來簡化編配階段。

+0

我試過這個...但它並沒有幫助... –

+0

@ jj09,它在我測試代碼時確實工作。也許你想顯示你試過的是什麼? –

+0

這是行爲,當我在// Act之前添加此行時!謝謝你的幫助! –