NUnit Assert.AreEqual(LeftObject,RigtObject)

Следующие ссылки предполагают, что это должно работать.

  1. Сравните равенство между двумя объектами в NUnit

  2. Документация 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" />

Ваш класс DisplayLine имеет приоритет над Equals?

Klaus Gütter 18.12.2020 18:57

Нет, у него нет переопределения Equals.

Craig Gers 18.12.2020 19:05

Ваша ссылка на docs.nunit.org/2.2.2/comparisonAsserts.html является унаследованной документацией... Об этом даже написано вверху страницы! Я отредактировал ваш вопрос, чтобы ссылка шла на текущую документацию. Пожалуйста, старайтесь не путать себя и других с устаревшей документацией — NUnit 2.2.2 выпущен в 2004 году!

Charlie 19.12.2020 00:45
Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
3
263
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

А также темы, на которые вы ссылаетесь, чтобы предложить, Assert.AreEqual сравнивается как ссылка, равная, если вы не переопределите ее.

Так что, хотя все выглядит одинаково, это, вероятно, разные объекты/ссылки.

Вы можете взглянуть на PropertyValuesAreEquals из этого ответа: https://stackoverflow.com/a/318238/919324 и либо сравнить свои объекты таким образом, либо переопределить сравнение объектов

Чтобы получить интеллектуальное сообщение об ошибке, вы также должны переопределить ToString() для объекта. Если вы этого не сделаете, для пользовательских типов будет отображаться только имя класса.

Charlie 19.12.2020 00:46

Отличное предложение. Что я сделал, так это создал метод Equals для моего класса DisplayLine. Затем я мог бы вызвать этот метод Equals в своем тесте. Assert.IsTrue(ожидаемое.Equals(responseMessage.AdditionalInfo‌​Line1));

Craig Gers 21.12.2020 11:39

Другие вопросы по теме