2010-02-16 40 views
0

一個ActionResult我知道這已經被問過,但我不能找到這麼...測試與表單視圖模型

我說有一個名爲HomeController的控制器,它具有被稱爲登錄的操作。

我的登錄操作需要一個名爲LoginFormViewModel的模型。

在我的行動裏面,我可以編寫像這樣的代碼;

public ActionResult Login(LoginFormViewModel loginFVM) 
    { 
     if (ModelState.IsValid) 
     { 
      return RedirectToAction("provider"); 
     } 

     return View(loginFVM); 
    } 

我想要的是寫一個測試,這將讓我在表單視圖模型傳遞,並檢測它是否有效或無效,因而斷言結果。

編輯

我想我可能已經困惑的問題了一下。

在我的模型上,我有一些驗證,檢查是否填寫了用戶名,密碼是否符合我們的要求。

所以我測試的是模型驗證是否正常,我想我會通過執行View來做到這一點,因爲這是現實生活中會發生的事情。

所以基本上我要創建一個模型,該模型應該會失敗ModelState.IsValid測試,我希望能夠在我的測試中切入。

如果有更好的方法,那麼我很樂意擁有它。

+0

問題究竟是什麼?控制器動作就像其他任何方法一樣,所以在一次測試中你將傳遞Login()一個有效的模型,而在另一次測試中你會傳遞Login()和無效模型。你在問如何編寫測試,如何構建模型或其他東西? – 2010-02-16 03:00:10

+0

我在問如何在創建新項目時創建的測試項目中編寫測試。 – griegs 2010-02-16 03:01:12

+0

@Jacob是的,我已經做出了改變,但這不是問題的關鍵。 – griegs 2010-02-16 03:31:38

回答

1

如果您正在測試,以確保您的模型通過對視圖通過正確:

[Test] 
public void Login_Should_Set_Model() 
{ 
    var controller = new HomeController(); 
    var model = CreateMockLoginFormViewModel(); 
    var result = controller.Login(model) as ViewResult; 

    Assert.AreEqual(model, result.ViewData.Model); 
} 

UPDATE 由於OP有興趣測試MVC是否被驗證模型,我發現此鏈接可能有所幫助:Testing DataAnnotation-based validation in ASP.NET MVC

+0

謝謝@HackedByChinese,但你可以檢查我的編輯。 – griegs 2010-02-16 03:15:52

+0

我明白了。我認爲這裏的問題是你是否應該測試MVC執行驗證的能力。對你來說,選擇一個兼容的驗證框架和技術可能會更合適,並且將重點放在你的模型上進行驗證並直接測試*,而不是MVC的管道。雖然我可能是錯的。 – HackedByChinese 2010-02-16 03:26:20

+0

我聽到你說的話,但我真的很想在視圖基礎上進行測試,並傳入可能通過或失敗的模型。 +1在您的解決方案中,因爲我認爲我可以在其他地方使用它。 – griegs 2010-02-16 03:27:43