2011-11-14 11 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

だけアサート相に次の行を追加します。これは、UpdateModel方法が依存するコントローラに値プロバイダを割り当て

controller.ValueProvider = formParameters.ToValueProvider(); 

を。この値プロバイダは、定義したFormCollection変数に関連付けられ、いくつかの値を渡すことができます。

また、MvcContrib.TestHelperを使用するsimilar answerをチェックして、アレンジフェーズを簡素化することもできます。

+0

私はこれを試しました...しかし、それは役に立たない... –

+0

@ jj09、私はコードをテストしたときに私の仕事形式でした。たぶんあなたは試したことが何であるかを見せたいでしょうか? –

+0

//この行を追加すると動作します// Act!ご協力ありがとうございます! –