NUnit Assert.AreEqual(LeftObject,RigtObject)
NUnit Assert.AreEqual(LeftObject,RigtObject)
以下链接表明这应该有效。
Compare equality between two objects in NUnit
-
[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
: 并像那样比较您的对象,或者覆盖对象的比较
以下链接表明这应该有效。
Compare equality between two objects in NUnit
-
[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
: 并像那样比较您的对象,或者覆盖对象的比较