如何修改user.identity.name的值



我认为这是一个非常基本的问题-但我不确定如何做到这一点。

我正在尝试测试一个应用程序与不同的用户登录ID(因为这些用户有不同的角色)。应用程序使用系统用户的登录信息,没有自己的登录信息。通过user.identity.name获取该值。但是,我想重写此值以测试不同的用户登录。我该怎么做呢?

在设置身份验证票据时,将其更改为此处。我假设它使用表单认证(登录作为用户)。

FormsAuthentication.RedirectFromLoginPage("Joe",false);

如果使用Windows身份验证,可以使用模拟。

如果使用Windows身份验证,另一种选择是修改浏览器设置以提示您登录。然后以不同的用户登录

你可以用Moq来模拟它

Mock<ControllerContext> ControllerContextMock;
string UserName = "TestUser";
ControllerContextMock = new Mock<ControllerContext>();
ControllerContextMock.SetupGet(p => p.HttpContext.User.Identity.Name).Returns(UserName); 

这是我做单元/行为测试的方式

根据我下面的评论,我在get用户名

周围添加了一个包装器
public string OverideName;
private string GetUserName()
{
    string name;
    if(OverideName != null && OverideName.Langth>0)
    {
       name = OverideName;
    }else
    {
       name = User.Identity.Name;
    }
    return name;
}

对于大多数旧的asp.net web表单测试,这是测试内容的唯一方法

我也想这么做。

我的想法是创建一个"更改身份"页面(仅由在我的应用程序中具有管理员角色的人访问)。然后,为了测试应用程序,他们可以选择成为不同的人/角色。

我的应用程序中的每个页面都测试会话集用户id和角色是否有效(在第一次使用应用程序时设置),并加载页面以显示该用户/角色想要看到的信息/功能。因此,这个"更改身份"功能将会话用户id和角色设置为被测试用户的id和角色,并允许测试人员表现得好像他们是另一个人一样。还提供了一个重置选项,将自己重置为您。

最简单的解决方案是当用户更新名称时-注销他,并要求登录。

最新更新