在控制器单元测试中包含ModelState.IsValid?

时间:2013-07-26 09:20:12

标签: asp.net-mvc asp.net-mvc-3 unit-testing mstest

我有以下控制器:

public ActionResult Login(LoginUseraccount loginUseraccount)
{
    try
    {
        if (ModelState.IsValid)
        {
            //Do something
            return RedirectToAction("Index", "Dashboard");
        }
        else
        {
            //Do something
            return RedirectHomeIndex;
        }
    }
    catch (UserNotActiveException userNotActiveException)
    {
        //Do something
        return RedirectHomeIndex;
    }
    catch (Exception exception)
    {
        //Do something
        return RedirectHomeIndex;
    }
}

我有三个问题:

1)你会为if-else定义两个测试吗? 第一个测试将测试ModelState.IsValid == true,另一个测试ModelState.IsValid == false?在为模型编写的单元测试中测试它会不会更有意义吗?

2)你会测试UserNotActiveException吗?如果抛出异常由业务逻辑(其他类)决定。因此,在业务逻辑测试中进行此测试更有意义,您同意吗?

3)你会测试异常吗?我认为这没有意义。

我知道没有“正确”或“错误”,但我真的很感激您的反馈。

2 个答案:

答案 0 :(得分:1)

在我看来,你应该测试一切。 它不会花费太多的精力和时间,但会为您的代码带来良好的信心。

  1. 我认为你肯定应该这样做。
  2. 您应该测试不是异常的原因,而是测试控制器在异常情况下的行为。因此,如果UserNotActiveException控制器返回相应的ActionResult
  3. ,您的测试应验证
  4. 与第二点相同。

答案 1 :(得分:0)

我当然会写if / else子句的单元测试。您希望确保测试中涵盖所有逻辑,但应该单独完成,而不是在同一测试中。

至于例外情况,我会再测试一下。您可以使用MvcContrib来帮助您对操作方法进行单元测试,以检查返回的路径或视图,例如RedirectToHomeIndex。我会这样做,因为我确信行动方法符合我的期望。如果任何测试失败,那么我知道用户可能被重定向到不同于我想要的页面。