1

在我的应用程序中,用户通过 WIF 登录。用户的凭据存储在System.Security.Principal.IIdentity. 现在我想测试CreateUser()方法。我必须以某种方式伪造那个对象。我尝试做这样的事情: -extract 方法返回该对象:

public IIdentity GetIdentity()
{
    return Thread.CurrentPrincipal.Identity;
}

然后在测试文件中做这样的事情:

    var identity = new GenericIdentity("mymail@mydomain.com");
    A.CallTo(() => _userRepository.GetIdentity()).Returns(identity);

但它不起作用。任何想法如何以最好的方式做到这一点?

4

2 回答 2

1

看看 WIF 的 ClaimsPrincipalHttpModule。它将 Windows 标识转换为 IClaimsPrincipal 而无需 STS。

还可以查看SelfSTS,它是一个非常有用的工具。

于 2012-05-28T19:21:23.470 回答
0

创建一个假的 WindowsIdentity 类:

public class FakeWindowsIdentity : WindowsIdentity
{
    private readonly string _name;

    public FakeWindowsIdentity(string sUserPrincipalName) 
        : base(GetAnonymous())
    {
        _name = sUserPrincipalName;
    }

    public override string Name => _name;
}

我正在使用 FakeItEasy,所以我创建了一个IPrincipal像这样的假货:

IPrincipal fakeUser = A.Fake<IPrincipal>();
A.CallTo(() => fakeUser.Identity)
    .Returns(new FakeWindowsIdentity("domain\\username"));

分配给线程:

Thread.CurrentPrincipal = fakeUser;
于 2021-09-24T21:58:46.073 回答