我得到這個錯誤在我的單元測試:Assert.AreEqual在兩個相同的MVC ViewModel結果上失敗?
Assert.AreEqual failed. Expected:<ShizoMe.Web.ViewModel.AccountViewModel>. Actual:<ShizoMe.Web.ViewModel.AccountViewModel>.
這是我的測試代碼:
[TestMethod]
public void Register_Prevents_Duplicate_Users()
{
var controller = GetAccountController();
var model = new AccountViewModel
{
Register = new RegisterModel
{
EmailAddress = "[email protected]"
}
};
var result = (ViewResult) controller.Register(model.Register);
Assert.AreEqual("A user with this email address already exists.",
controller.ModelState["UserExists"].Errors[0].ErrorMessage);
Assert.AreEqual(model, result.ViewData.Model);
}
這是我的註冊方法:
[HttpPost]
public virtual ActionResult Register([Bind(Prefix = "Register")]RegisterModel model)
{
var accountModel = new AccountViewModel();
if (ModelState.IsValid)
{
if (_accountRepository.GetUser(model.EmailAddress) != null)
{
ModelState.AddModelError("UserExists", "A user with this email address already exists.");
return View(accountModel);
}
var newUser = new User
{
EmailAddress = model.EmailAddress,
Password = model.Password,
CreatedDate = DateTime.UtcNow
};
if (_accountRepository.RegisterUser(newUser))
{
_formsService.SignIn(newUser);
return RedirectToAction(MVC.Home.Index());
}
}
return View(accountModel);
}
任何想法,爲什麼最後Assert.AreEqual失敗了?當我調試時,ViewModels(model和result.ViewData.Model)是相同的。
非常感謝。
喬納森嗨,你可以給我一個例子或指向我一個約忽略equals()和GetHashCode()方法的鏈接?我不知道我需要做什麼:)非常感謝。 – 2010-07-14 15:36:47
這就是我現在所擁有的,這似乎並不工作: public override bool Equals(object obj) { if(obj == this) return true; var that = obj作爲AccountViewModel; return that!= null && Equals(this,that); } public override int GetHashCode() { return base.GetHashCode(); } 謝謝。 – 2010-07-14 16:08:49
你需要決定你的對象是什麼平等。我嘗試挑選一個代表實體身份的屬性。然後,我會在GetHashCode()重寫中返回該屬性的哈希碼,並覆蓋Equals(),從該方法中引用GetHashCode() - 回答編輯樣例。它是一個開始的基本框架。就你而言,你可能想要使用EmailAddress屬性開始嵌套的User對象。並且在賬戶模型中可以基於內部用戶對象。在這裏你會比較你想要的功能而不是對象引用。 – 2010-07-14 18:25:48