2010-02-16 66 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