gpt4 book ai didi

c# - 如何在模拟 ClaimsPrincipal 中添加声明

转载 作者:IT王子 更新时间:2023-10-29 04:31:51 27 4
gpt4 key购买 nike

我正在尝试对从 ClaimsPrincipal.Current 获取信息的 Controller 代码进行单元测试。在 Controller 代码中我

public class HomeController {
public ActionResult GetName() {
return Content(ClaimsPrincipal.Current.FindFirst("name").Value);
}
}

我正在尝试用声明模拟我的 ClaimsPrincipal,但我仍然没有从声明中获得任何模拟值。

// Arrange
IList<Claim> claimCollection = new List<Claim>
{
new Claim("name", "John Doe")
};

var identityMock = new Mock<ClaimsIdentity>();
identityMock.Setup(x => x.Claims).Returns(claimCollection);

var cp = new Mock<ClaimsPrincipal>();
cp.Setup(m => m.HasClaim(It.IsAny<string>(), It.IsAny<string>())).Returns(true);
cp.Setup(m => m.Identity).Returns(identityMock.Object);

var sut = new HomeController();

var contextMock = new Mock<HttpContextBase>();
contextMock.Setup(ctx => ctx.User).Returns(cp.Object);

var controllerContextMock = new Mock<ControllerContext>();
controllerContextMock.Setup(con => con.HttpContext).Returns(contextMock.Object);
controllerContextMock.Setup(con => con.HttpContext.User).Returns(cp.Object);

sut.ControllerContext = controllerContextMock.Object;

// Act
var viewresult = sut.GetName() as ContentResult;

// Assert
Assert.That(viewresult.Content, Is.EqualTo("John Doe"));

当我运行单元测试时,viewresult.Content 为空。如果我可以添加模拟声明,任何帮助。谢谢。

最佳答案

您不需要模拟 ClaimsPrincipal 它没有外部依赖项,您可以在未模拟的情况下创建它:

var claims = new List<Claim>() 
{
new Claim(ClaimTypes.Name, "username"),
new Claim(ClaimTypes.NameIdentifier, "userId"),
new Claim("name", "John Doe"),
};
var identity = new ClaimsIdentity(claims, "TestAuthType");
var claimsPrincipal = new ClaimsPrincipal(identity);

而且我不确定您在这里测试的是什么。当然,“John Doe”不会成为 viewResult.Content 的一部分,因为它从未设置为此。

关于c# - 如何在模拟 ClaimsPrincipal 中添加声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38323895/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com