私は今、本当に困惑しています。だから、私はWeb APIとプロジェクトのユニットテストに取り組んできましたが、最近は多くのコントローラで変更を加えただけですが、AccountControllerを完全に変更しませんでした。私のAccountControllerには、私がテストするたびに過去2ヶ月間素晴らしい仕事をしていたRegister()関数があります。今、しかし突然、私は登録を入力して呼び出すとき、UserManager.CreateAsyncはユニットテストの実行時にハングアップしますが、郵便番号ではありません
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
私のプログラムがハングして戻って来ることはありません。私はいくつかのことをテストしましたが、これは単体テストから呼び出されたときにのみ発生します(これも変更されていません)。PostmanからRegisterと同じJSONを呼び出すと正常に動作します。
登録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;
};
したがって、これらの機能のどれもがまったく変わっていない、と私の推測では、それがのawaitで何かを持っているが、私はちょうどなぜそれを把握することはできません登録済みユーザー関数を削除し、
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();
}
}
従業員の機能を削除しますこのように動作しています。
明らかに謝罪することについてお詫び申し上げますが、単体テストを踏むとどうなりますか?あなたはかなり素早くぶら下がっている場所を把握することができます。デバッグモードのクライアントとサーバーの両方を意味します。 – Rake36
ユニットテスト全体を実行しましたが、何もハングしませんでしたが、コール時にサーバ側でハングします。 IdentityResult result = await UserManager.CreateAsync(user、model.Password); – tokyo0709