Nunit 2.5.10 - Невозможно сравнить два объекта - PullRequest
0 голосов
/ 28 июня 2011

Я искал способ проверить два объекта, но я нахожу Equals, Assert, AreEqual и некоторые другие, и я не знаю, какой из них мне следует использовать.Кроме того, я делал свои тесты с новым синтаксисом Nunit, и мне сложно найти новый синтаксис для сравнения двух объектов.Вот мой тест и мой код:

[Test]
public void CheckForDriversSelectedMoreThanOnce_ReturnsDriversSelectedMoreThanOnceAndTheirSelectedPositions()
{
  //arrange
  Prediction prediction = new Prediction();

  Driver expected = new Driver { position = 1, name = "Michael Schumacher" };

  //act
  var actual = prediction.CheckForDriversSelectedMoreThanOnce();

  //assert
  //Assert.That(actual, Is.EqualTo(expected));
  //Assert.That(Is.Equals(actual, expected);
  Assert.AreEqual(expected, actual);
}

public Driver CheckForDriversSelectedMoreThanOnce()
{
  Driver driver = new Driver { position = 1, name = "Michael Schumacher" };
  return driver;
}

Строка Assert.That(actual, Is.EqualTo(expected)); и Assert.AreEqual(expected, actual); дает мне ожидаемое: Но было:

Другая строка Assert.That(Is.Equals(actual, expected); дает мне: Ожидаемое: TrueНо было: Ложь

1 Ответ

1 голос
/ 28 июня 2011

Возможно, вам потребуется реализовать IEquatable в вашем классе, аналогично;

   public bool Equals(Type other)
        {
            return Name == other.Name && Position == other.Position;
        }

У меня возникла эта проблема при попытке сравнить 2 объекта в операторе linq с помощью 'Contains', и приведенное выше исправило это.

Реализация по умолчанию экземпляра Функция Equals () зависит от типа вашего объекта. Ссылочные типы наследуют System.Object по умолчанию реализация, которая является простой идентификатор объекта (ReferenceEquals ()) проверять. По умолчанию ссылочные типы вернет true в экземпляре Equals () если и только если они одинаковы экземпляр объекта.

Я предполагаю, что Assert.AreEqual (obj1, obj2) в какой-то момент выполняет obj1.Equals (obj2), и в этом случае они не будут совпадать.

Другим вариантом будет утверждение реальных свойств, а не сопоставление объектов

Assert.AreEqual("Michael Schumacher", actual.Name);
...