gpt4 book ai didi

c# - 如何在单元测试中从测试中传递 UserIdentity

转载 作者:行者123 更新时间:2023-11-28 20:39:01 27 4
gpt4 key购买 nike

我正在尝试为我的网络 API 方法编写测试用例。

 [Fact]
public async Task Get_Message_By_Id()
{
var messages = new Messages()
{
MessageId = 1,
Recipient = "1;2;3",
Subject = "Test Subject",
MessageText = "test subject"
};

var mesBL = new Mock<IMessagesBusinessLogic>();
mesBL
.Setup(repo => repo.GetRecivedMessageById(It.IsAny<IWebToken>() ,messages.MessageId))
.Returns(Task.FromResult(messages));

var messageController = new MessagesController(mesBL.Object);

var contentResult = await messageController.GetRecivedMessageById(messages.MessageId) as OkObjectResult;

Assert.NotNull(contentResult);
}

我在 GetRecivedMessageById 方法调用时收到 null reference 错误。

Controller 方法;

[HttpGet]
[Route("{id:int}")]
public async Task<IActionResult> GetRecivedMessageById(int id)
{
return Ok(await _messagesBusinessLogic.GetRecivedMessageById(User.GetWebToken(), id));
}

这里的问题是因为用户身份传递了 NULL。

我们怎样才能通过测试呢?

最佳答案

Usernull 因为在执行被测方法之前未在测试中设置它。

//Create test user
var displayName = "User name";
var role = "SomeRole";

var token = new Mock<IWebToken>();
token.Setup(m => m.DisplayName).Returns(displayName);
token.Setup(m => m.Role).Returns(role);

var identity = new UserIdentity(token.Object);

var principal = new GenericPrincipal(identity, roles: new string[] { });
var user = new ClaimsPrincipal(principal);
// Set the User on the controller via the ControllerContext
var messageController = new MessagesController(mesBL.Object) {
ControllerContext = new ControllerContext()
{
HttpContext = new DefaultHttpContext() { User = user }
}
};

关于c# - 如何在单元测试中从测试中传递 UserIdentity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41396485/

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