0

我有以下控制器:

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)你会测试异常吗?我认为这没有意义。

我知道没有“对”或“错”之分,但我非常感谢您的反馈。

4

2 回答 2

1

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

  1. 我认为你绝对应该这样做。
  2. 您不应该测试异常的原因,而应该测试控制器在异常情况下的行为。因此,您的测试应该验证UserNotActiveException控制器是否返回适当的ActionResult.
  3. 与第二点相同。
于 2013-07-26T09:28:04.373 回答
0

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

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

于 2013-07-26T09:27:30.927 回答