【问题标题】:NUnit Assert.AreEqual(LeftObject,RigtObject)NUnit Assert.AreEqual(LeftObject,RigtObject)
【发布时间】:2021-03-29 09:15:18
【问题描述】:

以下链接表明这应该可行。

  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>

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

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

【问题讨论】:

  • 您的DisplayLine 类是否覆盖Equals
  • 不,它没有 Equals 覆盖。
  • 您到docs.nunit.org/2.2.2/comparisonAsserts.html 的链接是旧文档...它甚至在页面顶部这样说!我编辑了您的问题,以便链接到当前文档。请尽量避免将自己和他人与过时的文档混淆 - NUnit 2.2.2 来自 2004 年!

标签: c# nunit


【解决方案1】:

与您链接到建议的线程一样,Assert.AreEqual 比较为相等的引用,除非您覆盖它。

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

您可以从这个答案中查看PropertyValuesAreEqualshttps://stackoverflow.com/a/318238/919324,然后像这样比较您的对象,或者覆盖对象的比较

【讨论】:

  • 要获得智能错误消息,您还应该覆盖对象上的 ToString()。如果您不这样做,则只会为用户定义的类型显示类名。
  • 很好的建议。我所做的是为我的 DisplayLine 类创建一个 Equals 方法。然后我可以在我的测试中调用这个 Equals 方法。 Assert.IsTrue(expected.Equals(responseMessage.AdditionalInfoLine1));
猜你喜欢
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
  • 2011-02-23
相关资源
最近更新 更多