3

我认为这是一个非常基本的问题——但我不知道该怎么做。

我正在尝试测试具有不同用户登录 ID 的应用程序(因为这些用户具有不同的角色)。该应用程序使用系统用户的登录信息并且没有自己的登录信息。user.identity.name用于获取值。但是我想覆盖这个值来测试不同的用户登录。我怎样才能做到这一点?

4

4 回答 4

2

当您设置身份验证票时,请在此处进行更改。我假设它正在使用 Forms Auth(以用户身份登录)。

FormsAuthentication.RedirectFromLoginPage("Joe",false);

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

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

于 2013-03-15T15:19:55.237 回答
1

你总是可以用 Moq 之类的东西来模拟它

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

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

根据我下面的评论,我在获取用户名周围添加了一个包装器

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 网络表单测试,这确实是测试内容的唯一方法

于 2013-03-15T15:30:08.323 回答
0

我也想做同样的事情。

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

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

于 2015-04-28T14:02:13.570 回答
0

最简单的解决方案是当用户更新名称时 - 将他注销并要求登录。它为我工作

于 2017-12-12T07:31:39.283 回答