2011-04-08 132 views
2

我已經創建了一個擴展方法,它將返回HTML幫助器TextBoxFor。現在我想單元測試它,但它會拋出「未設置對象實例的對象引用」。因爲我已經在好幾個地方使用它單元測試HtmlHelper自定義TextBoxFor

擴展方法

public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper htmlHelper,  .......) 
{ 

    /* some logic here */ 
    ===> (Null Exception) 
    return htmlHelper.TextBoxFor(......); 
} 

的嘲諷的HtmlHelper是正確的。

+2

你可以添加一些更多的代碼請。 – Swaff 2011-04-08 12:42:01

+0

擴展方法的更多代碼。 – 2011-04-08 13:02:33

+0

它會幫助你看到單元測試,因爲你的問題可能是你沒有實例化'HtmlHelper'正確 – 2011-04-08 14:01:22

回答

6

不需要模擬HtmlHelper。你可以只創建一個假的視圖模型類,例如TestViewModel並在單元測試中只是做這樣的事情:

//-- Arrange 
TestViewModel testViewModel = new TestViewModel() 
      { 
       Name = "sdfsd" 
      }; 

IViewDataContainer dataContainerMock = MockRepository.GenerateStub<IViewDataContainer>(); 

dataContainerMock.ViewData = new ViewDataDictionary<TestViewModel>(testViewModel); 

HtmlHelper<TestViewModel> myHelper = new HtmlHelper<TestViewModel>(new ViewContext() 
      { 
       ViewData = new ViewDataDictionary<TestViewModel>(this._testViewModelWithoutMaxLength) 
      }, this._dataContainerMock); 

//-- Act 
MvcHtmlString result = //call your extension 

//-- Assert 
//add asserts here 

晚了一點,但希望它仍然是OK的人

+0

完美的,有同樣的問題,這是我所需要的,非常感謝。 – Apogee 2013-09-11 13:51:31

+0

MockRepository從哪裏來?我在哪裏可以找到測試項目? – Arjang 2016-06-29 10:29:38