Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 多重定向操作的单元测试_Asp.net Mvc 4_Unit Testing_C# 4.0 - Fatal编程技术网

Asp.net mvc 4 多重定向操作的单元测试

Asp.net mvc 4 多重定向操作的单元测试,asp.net-mvc-4,unit-testing,c#-4.0,Asp.net Mvc 4,Unit Testing,C# 4.0,我是这方面的新手,我需要这段代码的帮助。它正在使用MVC4.0,但需要调用数据库,我不知道如何开始创建单元测试,如果需要打开连接,希望您能帮助我 代码如下: [HttpPost] public ActionResult Add(User user, IEnumerable<int> Groups) { HttpCookie cookie = Request.Cookies.Get(SecurityManager.COOKIENAME);

我是这方面的新手,我需要这段代码的帮助。它正在使用MVC4.0,但需要调用数据库,我不知道如何开始创建单元测试,如果需要打开连接,希望您能帮助我

代码如下:

[HttpPost]
    public ActionResult Add(User user, IEnumerable<int> Groups)
    {
        HttpCookie cookie = Request.Cookies.Get(SecurityManager.COOKIENAME);
        if (cookie != null)
        {
            if (SecurityManager.HasPermission(int.Parse(cookie.Values.Get("Id")),(int)PermissionEnum.AddUser))
            {
                List<Group> gs = new List<Group>();
                if (Groups != null)
                {
                    foreach (int g in Groups)
                    {
                        Group gr = GroupManager.getGroup(g);
                        gs.Add(gr);
                    }
                }

                user.Groups = gs;

                if (UserManager.addUserEmployee(user))
                {
                    return RedirectToAction("Index");
                }
                else
                {
                    ViewBag.groups = new MultiSelectList(
                        GroupManager.getMyGroups(int.Parse(cookie.Values.Get("Id"))),"Id", "Name", Groups);
                    ModelState.AddModelError("Error", "Error saving the user.");
                    return View(user);
                }
            }
            else
            {
                return RedirectToAction("NoPermission", "Home");
            }

        }
        else
        {
            return RedirectToAction("Logout", "Home");
        } 
    }
[HttpPost]
公共操作结果添加(用户、IEnumerable组)
{
HttpCookie cookie=Request.Cookies.Get(SecurityManager.COOKIENAME);
if(cookie!=null)
{
if(SecurityManager.HasPermission(int.Parse(cookie.Values.Get(“Id”),(int)PermissionEnum.AddUser))
{
List gs=新列表();
如果(组!=null)
{
foreach(分组中的int g)
{
groupgr=GroupManager.getGroup(g);
一般事务.增补(gr);
}
}
user.Groups=gs;
if(UserManager.addUserEmployee(用户))
{
返回操作(“索引”);
}
其他的
{
ViewBag.groups=新的多选列表(
getMyGroups(int.Parse(cookie.Values.Get(“Id”),“Id”,“Name”,Groups);
AddModelError(“错误”,“保存用户时出错”);
返回视图(用户);
}
}
其他的
{
返回重定向到操作(“无许可”、“主页”);
}
}
其他的
{
返回重定向操作(“注销”、“主页”);
} 
}

由于我有多个重定向操作,如何测试重定向操作是什么?

要测试重定向操作结果,只需将结果强制转换为重定向路由结果,如下所示:

// test case 1: 
RedirectToRouteResult result = controller.AddUser(user, groups) as RedirectToRouteResult;

Assert.Equal("NoPermission", result.RouteValues["action"]);
Assert.Equal("Home", result.RouteValues["controller"]);

// test case 2:
RedirectToRouteResult result = controller.AddUser(user, groups) as RedirectToRouteResult;

Assert.Equal("Logout", result.RouteValues["action"]);
Assert.Equal("Home", result.RouteValues["controller"]);

数据库连接呢?没关系吗?嘿@blorkfish,当我添加结果时。RouteValues[“action”];显示此错误无法对“system.web.routing.routevaluedictionary”类型的表达式应用索引。您知道原因吗?