NUnit Assert.AreEqual(LeftObject,RigtObject)

NUnit Assert.AreEqual(LeftObject,RigtObject)

以下链接表明这应该有效。

  1. Compare equality between two objects in NUnit

  2. NNunt Documentation

    [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>

我不明白为什么...这 2 个对象属于同一类型并且包含相同的值?

 <package id="NUnit" version="3.12.0" targetFramework="net462" />

以及您链接到的线程建议,Assert.AreEqual 比较作为参考相等,除非您覆盖它。

所以即使一切看起来都一样,它们也可能是不同的对象/引用。

您可以查看此答案中的 PropertyValuesAreEquals: 并像那样比较您的对象,或者覆盖对象的比较