Mocking ClaimsPrincipal

问题描述 投票:0回答:1

我是 ASP.NET Core 的新手。我需要在 C# 的单元测试中模拟

ClaimsPrincipal
,方法如下:

public class MyTestHelper
{
    public static string getName(this ClaimsPrincipal principal)
    {
        string name = principal.Claims.Any(c => c.Type= "test") ? 
                           Convert.ToString(principal.Claims.Where(i => i.Type = "test").FirstOrDefault().Value);
    }
}

这是我到目前为止尝试过的。但是我收到一条错误消息,说无法从

IPrincipal
转换为
ClaimsPrincipal

[Test]
public void getNameTest()
{
    var principal  =  new Mock<IPrincipal>;
    string name =  MyTestHelper.getName(principal.Object);
}

感谢您的帮助!

c# unit-testing asp.net-core xunit
1个回答
0
投票

抛出异常的原因是您的方法需要特定的

ClaimsPrincipal
实现,但您的模拟只是创建
IPrincipal
的模拟。

老实说,虽然没有必要嘲笑

ClaimsPrincipal
。它是一个带有公共构造函数的轻量级公共类,这意味着您可以非常轻松地为您的测试创建一个(比模拟和设置要返回的声明更容易)。我们在单元测试中使用类似这样的东西,你可以在其中传递你想要的声明:

public static ClaimsPrincipal CreateClaimsPrincipal(params Claim[] identityClaims)
{
    var identity = new ClaimsIdentity(identityClaims);

    var principal = new ClaimsPrincipal(identity);

    return principal;
}
© www.soinside.com 2019 - 2024. All rights reserved.