【问题标题】:Unit test RedirectToRouteResult单元测试 RedirectToRouteResult
【发布时间】:2013-07-26 11:08:14
【问题描述】:

我的控制器中有以下代码:

public class MyController : BaseController
{
    public ActionResult MyMethod()
    {
        ...
        return RedirectToAction("Index", "Dashboard");
    }
}

我想对此重定向 (RedirectToRouteResult) 进行单元测试。 我是这样做的:

Assert.IsTrue(result.RouteValues.ContainsKey("action"));
Assert.IsTrue(result.RouteValues.ContainsKey("controller"));
Assert.AreEqual("Index", result.RouteValues["action"].ToString());
Assert.AreEqual("Dashboard", result.RouteValues["controller"].ToString());

所以我需要四个断言来测试我的 RedirectToRouteResult。 有没有更有效的方法?

【问题讨论】:

  • id 还有 assert.instanceoftype 因为你有它返回 actionresult
  • 是的,我是这样做的:RedirectToRouteResult result = (RedirectToRouteResult)controller.Captcha(loginUseraccount);如果不是 RedirectToRouteResult 则抛出异常并且测试失败。
  • 我知道通常不赞成多个断言,但我使用的原则是您正在测试一个“事物”。在这种情况下,您符合总体思路。

标签: asp.net-mvc asp.net-mvc-3 unit-testing redirecttoaction redirecttoroute


【解决方案1】:

有一种更有效的方法,因为您不需要测试这两行

Assert.IsTrue(result.RouteValues.ContainsKey("action"));
Assert.IsTrue(result.RouteValues.ContainsKey("controller"));

这些是您尚未编写的代码的断言。您必须相信编写该代码的人有自己的单元测试。如果前两行有问题,那么最后的两个断言就会失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2011-04-12
    • 2023-03-21
    • 2011-05-04
    相关资源
    最近更新 更多