zoukankan      html  css  js  c++  java
  • 单元测试MVC Controller时如何模拟FormsAuthentication

    假如你的Controller里面包含如下代码

     public ActionResult Register(RegisterModel model)
    {
    ......................

    if (createStatus == MembershipCreateStatus.Success)
    {
    FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
    return RedirectToAction("Index", "Home");
    }
    return View(model);
    }

    在单元测试时候,红色那部分会抛异常。造成测试不便的原因是违反了SoC(separation of concern)原则。注册逻辑和登录逻辑混在一起。解决方案是将登录逻辑提取出来。

     public interface IAuthProvider
    {
    void SetAuthCookie(string userName, bool createPersistentCookie);
    }

    public class FormsAuthProvider : IAuthProvider
    {

    public void SetAuthCookie(string userName, bool createPersistentCookie)
    {
    FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
    }
    }
    public ActionResult Register(RegisterModel model)
    {

    if (createStatus == MembershipCreateStatus.Success)
    {
    this.authProvider.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
    return RedirectToAction("Index", "Home");
    }
    else
    {
    ModelState.AddModelError("", ErrorCodeToString(createStatus));
    }
    }

    // If we got this far, something failed, redisplay form
    return View(model);
    }
    在测试时候用Moq去模拟FormsAuthentication,代码如下:
     public void RegisterTest()
    {
    Mock<IAuthProvider> mock = new Mock<IAuthProvider>();
    mock.Setup(m => m.SetAuthCookie("admin", false));

    var controller = new AccountController(mock.Object);
    var result = (RedirectToRouteResult)controller.Register(model);
    Assert.AreEqual("Index", result.RouteValues["action"]);
    ;
    }
    
    
    该方案来源于《Pro ASP.NET MVC 3 Framework》
  • 相关阅读:
    selenium webdriver简介
    web自动化selenium环境搭建
    web自动化基础之web页面组成
    接口测试基础八--接口自动化前期准备
    小程序测试关注点之一-登录授权
    python实现十大经典算法
    pytest 框架之pytest-html报告生成
    pytest 框架与 unittest 框架的对比
    selenium _上传操作
    selenium 常见操作,使用 js 操作-日期框及文本框
  • 原文地址:https://www.cnblogs.com/zhangjiang/p/2413691.html
Copyright © 2011-2022 走看看