2010-04-25 43 views
0

我正在開發一個項目使用BDD/TDD技術,我正在盡我所能留住課程。我碰到的一個問題是單元測試DefaultModelBinder。我使用mspec編寫我的測試。NullReferenceException當測試DefaultModelBinder

我有一個這樣的類,我要綁定到:

public class EmailMessageInput : IMessageInput 
    { 
     public object Recipient 
     { 
      get; set; 
     } 

     public string Body 
     { 
      get; set; 
     } 

    } 

這裏是我如何建立我的規格範圍內。我正在構建一個假表單集合並將其填充到一個bindingContext對象中。

Because of =() => 
       { 
        _model = _modelBinder.BindModel(null, _bindingContext); 
       }; 

任何線索它可能是:

public abstract class given_a_controller_with_valid_email_input : 
      given_a_controller_context 
     { 
      Establish additional_context =() => 
           { 
            var form = new FormCollection 
                { 
                 new NameValueCollection 
                  { 
                   { "EmailMessageInput.Recipient", "[email protected]"}, 
                   { "EmailMessageInput.Body", "Test body." } 
                  } 
                }; 

            _bindingContext = new ModelBindingContext 
                 { 
                  ModelName = "EmailMessageInput", 
                  ValueProvider = form 
                 }; 

            _modelBinder = new DefaultModelBinder(); 
           }; 

      protected static ModelBindingContext _bindingContext; 
      protected static DefaultModelBinder _modelBinder; 
     } 

     public abstract class given_a_controller_context 
     { 
      protected static MessageController _controller; 

      Establish context = 
       () => 
        { 
         _controller = new MessageController(); 
        }; 
     } 

最後,當我從裏面我的規格之一執行.BindModel()我的規格拋出一個空引用異常?

如果需要,隨時向我諮詢更多信息。我可能會認爲某件事是理所當然的。

回答

0

恐怕我必須從一個問題開始:爲什麼要測試默認的模型綁定器? DefaultModelBinder類是框架的一部分,所以它不是你的責任來測試。你應該認爲它是一個工作黑匣子。

無論如何,看着你的代碼,我認爲你試圖完成的是獲得一個綁定模型進一步測試;我在正確的軌道上嗎?如果是這樣,我會建議你看看James Broome's MSpec extensions for MVC

源代碼帶有幾個例子;但它可以讓你,例如,通過簡單地做

It should_display_the_person_name =() => result.Model<Person>().Name.ShouldNotBeNull(); 

希望這會調用一個控制器和行爲上的(類型!)視圖模型(傳遞給從控制器動作視圖中的一個)上的操作方法幫助

相關問題