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

时间:2016-12-30 12:44:09

标签: c# unit-testing testing asp.net-core moq

我正在尝试为我的web 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);
 }

null reference方法调用时出现GetRecivedMessageById错误。

控制器方法;

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

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

我们如何从Test中传递它?

1 个答案:

答案 0 :(得分:1)

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 }
    }
};
相关问题