Ошибка Assert.AreEqual на двух идентичных результатах MVC ViewModel? - PullRequest
0 голосов
/ 13 июля 2010

Я получил эту ошибку в моем модульном тесте:

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 = "testUser@test.com"
                                           }
                        };

        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 (модель и result.ViewData.Model) совпадают.

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 13 июля 2010

Переопределили ли вы методы Equals () и GetHashCode () для вашего класса AccountViewModel?

пример:

public override bool Equals(object obj)
    {
        if (obj == null)
        {
            return false;
        }

        if (Object.ReferenceEquals(this, obj))
        {
            return true;
        }

        if (this.GetHashCode() == obj.GetHashCode())
        {
            return true;
        }

        return false;
    }

    public override int GetHashCode()
    {
        return Id.GetHashCode();
    }
1 голос
/ 13 июля 2010

AccountViewModel IEquatable? Если нет, C # просто использует Object.ReferenceEquals для их сравнения. Это будет верно, только если они оба ссылаются на один и тот же объект (имеют одинаковые значения свойств, что недостаточно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...