debugging ASP.NET核心用户管理器异步创建

zzwlnbp8  于 2022-11-14  发布在  .NET
关注(0)|答案(1)|浏览(72)

当我调试测试时,我看到它通过了await userManager.CreateAsync(user),但随后它转到了catch,只有当它为空时才应该转到catch,但事实并非如此。
这是控制器:

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);
    }
}

然后我得到这个错误:
消息:Assert.Null()预期失败:(空)实际值:System.AggregateException:出现一个或多个错误。(对象引用未设置为对象的示例。)---〉
我的问题是我如何完成剩下的测试,而不是当我创建一个用户时它会被捕获。

xnifntxz

xnifntxz1#

我不确定您的函数尝试执行什么操作。您尝试获取用户,然后尝试创建用户,然后列出所有用户,最后返回原始获取用户请求的id。
如果用户最初不存在,则

ModelConverter.ViewModelToModel.GetUser(userVM)

如果是前者,那么

return user.Id;

将引发null异常。
此外,创建和列出用户行似乎与函数的其余部分无关,因为您没有利用他们的响应。此代码示例是函数的完整副本吗?

相关问题