2012-12-14 42 views
0

我已經看過以前的問題,但我找不到這個特定場景的答案:我正在使用TDD方法的ASP.NET MVC 3。在我的動作方法上,我使用了與ActionResult相對的返回類型的ViewResult。這很好,可以測試我的控制器。但是,我需要測試我的視圖模型以及我的控制器。我可以通過在ViewResultBase(實現ViewResult,而不是ActionResult)上使用Model屬性來進行模型測試,這非常愉快。ViewResult有沒有ActionResult RedirectToAction的等價物?

如果視圖模型爲null,那麼我想重定向到另一個動作。 ActionResult支持一個RedirectToAction方法。但是,ViewResult不會。我已經嘗試了View方法,但瀏覽器地址欄中的URL不會更改。此外,我甚至嘗試了經典的ASP.Net Response.Redirect(...),不出所料,我的單元測試抱怨Response對象沒有被填充。

那麼,我用什麼方法來實現ViewResult的ActionResult RedirectToAction的等價物?

+0

您使用[MVC Contrib Test Helper](http://mvccontrib.codeplex.com/wikipage?title=TestHelper)嗎? –

+0

不,只是標準的微軟單元測試套件VS 2010 Pro – CarneyCode

+0

它會自動創建某些對象,如「HttpResponse」對象,因此您可以輕鬆地單元測試控制器。它可以幫助您不必根據自己的開發策略更改結果類型,而是可以使用「ActionResult」。過去我已經使用了它幾次,它允許我創建測試,否則幾乎不可能創建測試。 –

回答

0

我找到了一個辦法。我用下面的步驟:

  1. 設置我的操作方法返回類型的ActionResult

  2. 我改變了它的單元測試使用的ActionResult

  3. 我創建了兩個額外的操作方法與返回類型的ResultView。

  4. 對於來自[1]的if語句方法的每個分支,我重定向到[3]中適當的操作方法,我使用RedirectToAction來重定向。

  5. 我創建了兩個使用ResultView測試在[3]中創建的操作方法的單元測試,並讓我可以訪問每個的基礎模型。

0

如果您需要從控制器返回多個結果類型,則將其返回類型設置爲操作結果,然後聲明不同的條件創建正確的結果類型。

例如,在AJAX動作中,如果驗證失敗或出現異常,您可能希望返回HttpStatusCodeResults以將響應屬性設置爲錯誤。

然後,當動作成功時,您可能希望返回一個局部視圖以顯示結果。

使用這種方法,您可以在您的控制器中定製您的邏輯,並仍然斷言不同的結果是正確的。

+0

這是如何幫助我運行實現ViewResultBase的測試? ActionResult不。 – CarneyCode

相關問題