C# NUnit Assert.AreEqual(LeftObject,RigToObject)

C# NUnit Assert.AreEqual(LeftObject,RigToObject),c#,nunit,C#,Nunit,下面的链接表明这应该是可行的 [TestFixture()] 公共类响应消息单元测试 { 私人模拟配置MOQ; 私有模拟ICardReaderMoq; 私人回应信息; 公共响应消息单元测试() { //表演 此._IConfigurationMoq=new Mock(); _IConfigurationMoq.Setup(x=>x.REPEATDELAYTIME)。返回(0); _IConfigurationMoq.Setup(x=>x.color\u整体\u响应\u区域)。返回(true

下面的链接表明这应该是可行的

  • [TestFixture()]
    公共类响应消息单元测试
    {
    私人模拟配置MOQ;
    私有模拟ICardReaderMoq;
    私人回应信息;
    公共响应消息单元测试()
    {
    //表演
    此._IConfigurationMoq=new Mock();
    _IConfigurationMoq.Setup(x=>x.REPEATDELAYTIME)。返回(0);
    _IConfigurationMoq.Setup(x=>x.color\u整体\u响应\u区域)。返回(true);
    这是。_ICardReaderMoq=new Mock();
    this.responseMessage=新的responseMessage(_IConfigurationMoq.Object,_ICardReaderMoq.Object);
    } 
    [测试(说明]=
    “调用ResponseMessageDisplayAdditionalInfo\u空方法”+
    “使用填充字段的背景色”+
    “附加信息行[1-4]和”+
    “附加信息编号[1-4]”)
    [测试用例(背景色,很好)]
    公共无效响应消息显示附加信息为空(字符串背景色)
    {
    //安排
    _IConfigurationMoq.Setup(x=>x.color\u整体\u响应\u区域)。返回(true);
    _IConfigurationMoq.Setup(x=>x.REPEATDELAYTIME)。返回(0);
    DisplayLine预期=新的DisplayLine(\u IConfigurationMoq.Object,null,null,BackgroundColor);
    //表演
    responseMessage.DisplayAdditionalInfo_为空(背景色);
    //断言
    Assert.AreEqual(预期,responseMessage.AdditionalInfoLine1);
    //Assert.AreEqual(预期,responseMessage.AdditionalInfoLine2);
    //Assert.AreEqual(预期,responseMessage.AdditionalInfoLine3);
    //Assert.AreEqual(预期,responseMessage.AdditionalInfoLine4);
    //Assert.AreEqual(预期、responseMessage.AdditionalInfoNo1);
    //Assert.AreEqual(预期、responseMessage.AdditionalInfoNo2);
    //Assert.AreEqual(预期、responseMessage.AdditionalInfoNo3);
    //Assert.AreEqual(预期、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" />
    

    以及您链接到建议的线程,
    Assert.AreEqual
    作为引用进行比较,除非您重写它

    因此,尽管所有东西看起来都一样,但它们可能是不同的对象/引用


    您可以从这个答案中查看
    属性值eEquals
    :或者像这样比较您的对象,或者覆盖对象的比较

    您的
    显示行
    类是否覆盖
    Equals
    ?不,它没有Equals覆盖。您的链接是遗留文档…它甚至在页面顶部!我编辑了您的问题,以便链接指向当前文档。请尽量避免将您自己和他人与过时的文档混淆-NUnit 2.2.2是从2004年开始的!要获得智能错误消息,您还应覆盖ToString()如果不这样做,则只显示用户定义类型的类名。很好的建议。我所做的是为DisplayLine类创建一个Equals方法。然后,我可以在test.Assert.IsTrue(expected.Equals(responseMessage.AdditionalInfoLine1))中调用此Equals方法;
     <package id="NUnit" version="3.12.0" targetFramework="net462" />