Следующие ссылки предполагают, что это должно работать.
Сравните равенство между двумя объектами в NUnit
Документация NNunt
[TestFixture()]
public class ResponseMessageUnitTests
{
private Mock<IConfiguration> _IConfigurationMoq;
private Mock<ICardReader> _ICardReaderMoq;
private ResponseMessage responseMessage;
public ResponseMessageUnitTests()
{
//Act
this._IConfigurationMoq = new Mock<IConfiguration>();
_IConfigurationMoq.Setup(x => x.REPEATDELAYTIME).Returns(0);
_IConfigurationMoq.Setup(x => x.COLOUR_WHOLE_RESPONSE_AREA).Returns(true);
this._ICardReaderMoq = new Mock<ICardReader>();
this.responseMessage = new ResponseMessage(_IConfigurationMoq.Object, _ICardReaderMoq.Object);
}
[Test(Description =
"Calling ResponseMessage DisplayAdditionalInfo_Empty Method " +
"with a Background Colour that populates the fields " +
"AdditionalInfoLine[1-4] and " +
"AdditionalInfoNo[1-4]")]
[TestCase(BACKGROUNDCOLOURS.GOOD)]
public void ResponseMessage_DisplayAdditionalInfo_Empty(string backgroundColour)
{
//Arrange
_IConfigurationMoq.Setup(x => x.COLOUR_WHOLE_RESPONSE_AREA).Returns(true);
_IConfigurationMoq.Setup(x => x.REPEATDELAYTIME).Returns(0);
DisplayLine expected = new DisplayLine(_IConfigurationMoq.Object, null, null, backgroundColour);
//Act
responseMessage.DisplayAdditionalInfo_Empty(backgroundColour);
//Assert
Assert.AreEqual(expected,responseMessage.AdditionalInfoLine1);
//Assert.AreEqual(expected, responseMessage.AdditionalInfoLine2);
//Assert.AreEqual(expected, responseMessage.AdditionalInfoLine3);
//Assert.AreEqual(expected, responseMessage.AdditionalInfoLine4);
//Assert.AreEqual(expected, responseMessage.AdditionalInfoNo1);
//Assert.AreEqual(expected, responseMessage.AdditionalInfoNo2);
//Assert.AreEqual(expected, responseMessage.AdditionalInfoNo3);
//Assert.AreEqual(expected, responseMessage.AdditionalInfoNo4);
}
Если я поставлю точку останова на строку с Assert.AreEqual, я получу следующее:
К моему удивлению, тесты не проходят со следующим сообщением об ошибке:
Message: Expected: <EPIC.APIS.REST.Models.Android.DisplayLine>
But was: <EPIC.APIS.REST.Models.Android.DisplayLine>
Я не понимаю, почему... Два объекта одного типа и содержат одинаковые значения?
<package id = "NUnit" version = "3.12.0" targetFramework = "net462" />
Нет, у него нет переопределения Equals.
Ваша ссылка на docs.nunit.org/2.2.2/comparisonAsserts.html является унаследованной документацией... Об этом даже написано вверху страницы! Я отредактировал ваш вопрос, чтобы ссылка шла на текущую документацию. Пожалуйста, старайтесь не путать себя и других с устаревшей документацией — NUnit 2.2.2 выпущен в 2004 году!
А также темы, на которые вы ссылаетесь, чтобы предложить, Assert.AreEqual сравнивается как ссылка, равная, если вы не переопределите ее.
Так что, хотя все выглядит одинаково, это, вероятно, разные объекты/ссылки.
Вы можете взглянуть на PropertyValuesAreEquals из этого ответа: https://stackoverflow.com/a/318238/919324 и либо сравнить свои объекты таким образом, либо переопределить сравнение объектов
Чтобы получить интеллектуальное сообщение об ошибке, вы также должны переопределить ToString() для объекта. Если вы этого не сделаете, для пользовательских типов будет отображаться только имя класса.
Отличное предложение. Что я сделал, так это создал метод Equals для моего класса DisplayLine. Затем я мог бы вызвать этот метод Equals в своем тесте. Assert.IsTrue(ожидаемое.Equals(responseMessage.AdditionalInfoLine1));
Ваш класс DisplayLine имеет приоритет над Equals?