gpt4 book ai didi

c# - UserManager.CreateAsync 挂起从单元测试而不是 Postman 执行

转载 作者:太空宇宙 更新时间:2023-11-03 12:41:56 26 4
gpt4 key购买 nike

我现在真的很困惑。因此,我一直在开发 Web API 并对项目进行单元测试,并且最近对许多 Controller 进行了更改,但完全保持 AccountController 不变。在我的 AccountController 中,我有函数 Register() ,在过去的 2 个月里每次我测试时它都运行良好。现在突然之间,当我进入注册并打电话时,

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 发布功能

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

所以这些函数都没有发生任何变化,我猜想它必须对 await 做些什么,但我就是不明白为什么它会这样。

最佳答案

刚刚解决了这个问题。完全重新启动了我的计算机和 Visual Studio,瞧。在旁注中,任何人都知道为什么这解决了这个问题?也许只是 Visual Studio 错误?

关于c# - UserManager.CreateAsync 挂起从单元测试而不是 Postman 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38663937/

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