2009-12-01 74 views
0

當我從Steve Sanderson的Pro ASP.NET MVC框架(從asp.net 1.0遷移到mvc 2 beta)遷移示例SportsStore應用程序using this app provided by eric lipton ,一切都很好 - 除了2個單元測試。
該錯誤消息在兩個是:
Tests.CartControllerTests.VeryLongTestMethodName:
System.ArgumentNullException:值不能爲未定義。
參數名稱:context

我懷疑這是因爲版本2中的默認模型綁定器支持DataAnnotations,因爲來自NUnit的堆棧調用跟蹤告訴我有關DefaultModelBinder中的一些問題。任何想法如何解決它?
編輯
試圖用Moq來解決問題,但它沒有奏效。 下面的代碼:
當將項目從asp.net mvc 1.0遷移到asp.net mvc 2 beta時,一些單元測試失敗

var request = new Moq.Mock<HttpRequestBase>(); 
request.Setup(r => r.HttpMethod).Returns("POST"); 
var mockHttpContext = new Moq.Mock<HttpContextBase>(); 
mockHttpContext.Setup(c => c.Request).Returns(request.Object); 
controllerContext = new ControllerContext(mockHttpContext.Object, new RouteData(), 
          new Moq.Mock<ControllerBase>().Object); 

方法我測試只提交POST。把「POST」放到我的測試中可以嗎?

+0

你能從失敗的單元測試中看到完整的堆棧跟蹤嗎? – Eilon 2009-12-01 20:48:25

+0

而我的名字是* Eilon * Lipton - 不是* Eric * Lipton :) – Eilon 2009-12-01 20:48:56

+0

對不起,對於名稱 是的,可以提供堆棧 – chester89 2009-12-01 20:57:12

回答

1

懷疑這可能是轉換器中的遺漏。如果這是一個(示例)應用程序,那麼你不能簡單地在2.0中打開應用程序,忘記轉換?

如果你想學習2.0,那麼這可能不是最好的前進方向。

如果您正在測試以查看轉換器是否工作,那麼可以在真實應用程序上嘗試而不是樣品。

您是否考慮過在轉換器網站上留下評論,因爲那裏留下的任何評論都是特定於轉換器的?

您是否真的嘗試逐行瀏覽代碼並查看是否有任何明顯的代碼。

無論如何,這些都是我會嘗試的。

2

爲了在ASP.NET MVC 2中使用它,你必須創建一個虛擬的ControllerContext,並將它設置在你的控制器上,在你的單元測試初始化​​(或「安裝」或「排列」)部分。

下面是如何創建一個虛擬ControllerContext與起訂量庫的幫助的例子:How to mock the controller context with moq

+0

好像我已經做了所有事情,就像這個例子說的那樣,但它仍然不要工作:(發佈堆棧跟蹤 – chester89 2009-12-03 19:41:31

0

我認爲,這仍然是在ASP.NET MVC 2.0版本的一個問題。與UpdateModel/TryUpdateModel一起使用時,FormCollection對象出現問題會引發異常。請參閱ASP.NET MVC 2 problem with UpdateModel

我最近嘗試升級我的項目,但現在決定堅持使用MVC 1.0,直到RTM(這是爲了解決問題)。

+0

我提到的問題是MVC 2.0 R1版本,新的MVC 2.0 R2版本修復了這個錯誤,升級應該可以解決這個問題。 – 2010-02-10 20:12:36