ASP.Net.Core userManager.CreateAsync

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

当我调试测试比我看到它通过await userManager.CreateAsync(用户),但然后它去捕获它只应该去,如果它是空的,它不是。这是控制器:

public async Task<ActionResult<string>> CreateUser(UserVM userVM)
{
    ApplicationUser user = ModelConverter.ViewModelToModel.GetUser(userVM);

    var x =   await userManager.CreateAsync(user);

    List<ApplicationUser> users = userManager.Users.ToList();

    return user.Id;
}

这是我使用的测试之一:

 public void Should_AddShiftExchangeToUser()
 {
    MPContext context = CleanContext();
    UsersController usersController = new UsersController();
    try
    {
        var x = usersController.CreateUser(new ViewModels.UserVM()).Result;
        var y = usersController.CreateUser(new ViewModels.UserVM()).Result;
        var result = usersController.AddShiftExchange(new ShiftExchangeVM() { RequesterId = x.Value, ReceiverId = y.Value }, x.Value).Result;
        Assert.NotNull(result.Value);
        ShiftExchange shiftExchange = context.shiftExchanges.FirstOrDefaultAsync(s => s.Id == result.Value).Result;
        Assert.NotNull(shiftExchange);
        Assert.NotNull(shiftExchange.Receiver);
        Assert.NotNull(shiftExchange.Requester);
    }
    catch (Exception ex)
    {
        Assert.Null(ex);
    }
}

然后我得到这个错误:

Message: Assert.Null() Failure Expected: (null) Actual: System.AggregateException: One or more errors occurred. (Object reference not set to an instance of an object.) ---> 

我的问题是我如何进行剩下的测试,而不是当我创建用户时它会被捕获。

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

我不确定你的功能是怎么做的。您尝试获取用户,然后尝试创建用户,然后在返回原始获取用户请求的ID之前列出所有用户。

如果用户最初不存在那么

ModelConverter.ViewModelToModel.GetUser(userVM)

当找不到用户或引发异常时,它会返回一个null对象吗?如果它是前者,那么

return user.Id;

将引发一个null异常。

此外,create和list用户行似乎与函数的其余部分无关,因为您没有将其响应用于任何事情。此代码示例是该函数的完整副本吗?

© www.soinside.com 2019 - 2024. All rights reserved.