UserManager.CreateAsync挂起单元测试的执行,而不是Postman

本文关键字:Postman 执行 CreateAsync 挂起 单元测试 UserManager | 更新日期: 2023-09-27 17:59:17

我现在真的很困惑。因此,我一直在做一个Web API,并在进行该项目的单元测试,最近刚刚对许多控制器进行了更改,但完全没有影响AccountController。在我的AccountController中,我有一个函数Register(),在过去的两个月里,每次我测试时,它都运行得很好。现在突然之间,当我进入注册并呼叫时,

IdentityResult result = await UserManager.CreateAsync(user, model.Password);

我的程序挂起,再也回不来了。我测试了一些东西,只有在从我的单元测试中调用时才会发生这种情况(这也没有改变),当我用完全相同的JSON从Postman调用Register时,它运行得很好。

注册API函数

// POST api/Account
[AllowAnonymous]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }
    var user = new ApplicationUser() { UserName = model.UserName, Email = model.Email, Active = true, CreationDate = DateTime.Now };
    IdentityResult result = await UserManager.CreateAsync(user, model.Password);
    if (!result.Succeeded)
    {
        return GetErrorResult(result);
    }
    return Ok();
}

测试功能

[TestMethod]
public void Register_Pass()
{
    // Arrange & Act
    var db = new WizardSwearsDB();
    new DBCleanup().RemoveRegisteredUser(userName);
    string apiCall = "";
    new
    {
        UserName = userName,
        Email = email,
        Password = password,
        ConfirmPassword = password
    }.Post(baseUrl + apiCall);
    var user = (from u in db.AspNetUsers
                where u.UserName == userName
                select u).FirstOrDefault();
    // Assert
    Assert.IsNotNull(user);
    Assert.AreEqual(userName, user.UserName);
}

JSON Post功能

public static void Post(this object obj, string url, string securityToken = null)
{
    var request = WebRequest.Create(url);
    obj.Request<string>(url, postJsonRequestBuilder, null, securityToken);
}
private static Func<string, object, string, WebRequest> postJsonRequestBuilder = (url, o, st) => jsonRequestBuilder(url, o, "POST", st);
private static Func<string, object, string, string, WebRequest> jsonRequestBuilder = delegate(string url, object obj, string method, string securityToken)
{
    WebRequest request = WebRequest.Create(url);
    if (!string.IsNullOrEmpty(securityToken)) request.Headers.Add("Authorization", string.Format("Bearer {0}", securityToken));
    request.Method = method;
    if (obj != null)
    {
        request.ContentType = "application/json";
        var payload = encoding.GetBytes(JsonConvert.SerializeObject(obj));
        request.ContentLength = payload.Length;
        using (var stream = request.GetRequestStream())
        {
            stream.Write(payload, 0, payload.Length);
        }
    }
    return request;
};

删除注册用户功能和删除员工功能

public void RemoveRegisteredUser(string userName)
{
    // Open up a connection to the database
    var db = new WizardSwearsDB();
    // Get the user from the ASPNetUsers table
    var dbUserASP = (from b in db.AspNetUsers
                    where b.UserName == userName
                    select b).FirstOrDefault();

    // Remove the user from both tables and save changes
    if (dbUserASP != null)
    {
        db.AspNetUsers.Remove(dbUserASP);
        db.SaveChanges();
    }
    RemoveEmployee(userName);
}
public void RemoveEmployee(string userName)
{
    // Open up a connection to the database
    var db = new WizardSwearsDB();
    // Get the user from the ASPNetUsers table
    var employee = (from b in db.Employees
                    where b.UserName == userName
                    select b).FirstOrDefault();
    // Remove the user from both tables and save changes
    if (employee != null)
    {
        db.Employees.Remove(employee);
        db.SaveChanges();
    }
}

因此,这些功能都没有发生任何变化,我猜测它必须与等待有关,但我不明白它为什么会这样做。

UserManager.CreateAsync挂起单元测试的执行,而不是Postman

刚刚解决了问题。重新启动了我的电脑和Visual Studio,瞧。顺便说一句,有人知道为什么这会解决这个问题吗?也许只是Visual Studio的一个bug?

我在尝试使用现有用户名创建用户时遇到了同样的问题-没有错误,只是什么都没有,空白。