【问题标题】:NUnit - Assert to check all properties are equal? [duplicate]NUnit - 断言检查所有属性是否相等? [复制]
【发布时间】:2010-11-12 13:46:21
【问题描述】:

Nunit 中是否有一个断言可以检查 2 个对象之间的所有属性是否相同,而无需我重写 Equals?

我目前正在使用反射来断言一对对象的每个单独属性。

【问题讨论】:

  • 我想你想要stackoverflow.com/questions/318210/…>

标签: nunit


【解决方案1】:

我不相信有。

Assert.AreEqual 通过 Equals 比较非数字类型。
Assert.AreSame 检查它们是否引用同一个对象

【讨论】:

    【解决方案2】:

    您可以使用一个名为 Should 的库来编写与框架无关的断言。它还有一个非常好的流畅语法,如果你喜欢流畅的界面,可以使用它。我有一篇与此相关的博客文章。

    http://nileshgule.blogspot.com/2010/11/use-should-assertion-library-to-write.html

    您可以使用 ShouldBeEquivalentTo

    两个对象和属性
    dto.ShouldBeEquivalentTo(customer);
    

    【讨论】:

    • 我们可以,但我们应该这样做吗?
    【解决方案3】:

    https://github.com/kbilsted/StatePrinter 专门用于将对象图转储为字符串表示,目的是编写简单的单元测试。

    • 它带有 witg Assert 方法,可以输出正确转义的字符串,轻松复制粘贴到测试中以更正它。
    • 它允许自动重写单元测试
    • 它与所有单元测试框架集成
    • 与 JSON 序列化不同,支持循环引用
    • 您可以轻松过滤,因此只转储部分类型

    给定

    class A
    {
      public DateTime X;
      public DateTime Y { get; set; }
      public string Name;
    }
    

    您可以以类型安全的方式,并使用 Visual Studio 的自动完成包含或排除字段。

      var printer = new Stateprinter();
      printer.Configuration.Projectionharvester().Exclude<A>(x => x.X, x => x.Y);
    
      var sut = new A { X = DateTime.Now, Name = "Charly" };
    
      var expected = @"new A(){ Name = ""Charly""}";
      printer.Assert.PrintIsSame(expected, sut);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-10
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 2013-01-27
      • 1970-01-01
      • 2016-10-03
      相关资源
      最近更新 更多