加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何在MVC5中从AccountController模拟Applicatio

发布时间:2020-12-16 07:25:24 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试在AccountController上编写Register Test for Register Method 我正在使用moq以及从Unit Test模拟ApplicationUserManager,ApplicationRoleManager和ApplicationSignInManager的正确方法是什么. public AccountController(ApplicationUserManager u
我正在尝试在AccountController上编写Register Test for Register Method

我正在使用moq以及从Unit Test模拟ApplicationUserManager,ApplicationRoleManager和ApplicationSignInManager的正确方法是什么.

public AccountController(ApplicationUserManager userManager,ApplicationRoleManager roleManager,ApplicationSignInManager signInManager)
{
    UserManager = userManager;
    RoleManager = roleManager;
    SignInManager = signInManager;

}

public ApplicationUserManager UserManager
    {
        get
        {
            return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
        }
        private set
        {
            _userManager = value;
        }
    }

private ApplicationSignInManager _signInManager;
    public ApplicationSignInManager SignInManager
    {
        get
        {
            return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
        }
        private set { _signInManager = value; }
    }

private ApplicationRoleManager _roleManager;
    public ApplicationRoleManager RoleManager
    {
        get
        {
            return _roleManager ?? HttpContext.GetOwinContext().Get<ApplicationRoleManager>();
        }
        set 
        {
            _roleManager = value;
        }
    }

解决方法

这可能不是你所需要的,但看一看,也许你会明白这一点.

AccountController.cs

[HttpGet]
[Route("register")]
[AllowAnonymous]
public ActionResult Register()
{
    if (IsUserAuthenticated)
    {
        return RedirectToAction("Index","Home");
    }
    return View();
}

public bool IsUserAuthenticated
{
    get 
    { 
        return
        System.Web.HttpContext.Current.User.Identity.IsAuthenticated; 
    }
}

AccountControllerTests.cs

[Test]
public void GET__Register_UserLoggedIn_RedirectsToHomeIndex()
{
    // Arrange
    HttpContext.Current = CreateHttpContext(userLoggedIn: true);
    var userStore = new Mock<IUserStore<ApplicationUser>>();
    var userManager = new Mock<ApplicationUserManager>(userStore.Object);
    var authenticationManager = new Mock<IAuthenticationManager>();
    var signInManager = new Mock<ApplicationSignInManager>(userManager.Object,authenticationManager.Object);

    var accountController = new AccountController(
        userManager.Object,signInManager.Object,authenticationManager.Object);

    // Act
    var result = accountController.Register();

    // Assert
    Assert.That(result,Is.TypeOf<RedirectToRouteResult>());
}

[Test]
public void GET__Register_UserLoggedOut_ReturnsView()
{
    // Arrange
    HttpContext.Current = CreateHttpContext(userLoggedIn: false);
    var userStore = new Mock<IUserStore<ApplicationUser>>();
    var userManager = new Mock<ApplicationUserManager>(userStore.Object);
    var authenticationManager = new Mock<IAuthenticationManager>();
    var signInManager = new Mock<ApplicationSignInManager>(userManager.Object,Is.TypeOf<ViewResult>());
}

private static HttpContext CreateHttpContext(bool userLoggedIn)
{
    var httpContext = new HttpContext(
        new HttpRequest(string.Empty,"http://sample.com",string.Empty),new HttpResponse(new StringWriter())
    )
    {
        User = userLoggedIn
            ? new GenericPrincipal(new GenericIdentity("userName"),new string[0])
            : new GenericPrincipal(new GenericIdentity(string.Empty),new string[0])
    };

    return httpContext;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读