【问题标题】:Test equality of two objects on testing在测试中测试两个对象的相等性
【发布时间】:2016-06-28 00:26:02
【问题描述】:

我有以下课程:

public class OrderRule {
  public OrderDirection Direction { get; }
  public String Property { get; }
}

我使用 XUnit 创建了一个单元测试,如下所示:

public void TryParse_ParseAscendingOrderRule() {

  OrderRule expect = new OrderRule("name", OrderDirection.Ascending);

  OrderRule result = factory.GetOrderRule("type1");

  Assert.Equal(result, expect);

}

我知道 expect 和 result 具有相同的 Direction 和 Property 值,但我在测试中仍然得到 False ...我想这是因为它们不是同一个实例 ...

我真的需要如下比较方向和属性吗?

  Assert.True(result.Property == expect.Property && expect.Property == expect.Property );

当对象有很多属性时,这可能会变得很长......

或者有更好的方法吗?

【问题讨论】:

    标签: c# xunit


    【解决方案1】:

    如果OrderRule 不需要成为一个类,则将其设为默认实现值相等的结构。还有一个关于价值平等的完整 MSDN page 可能会对您有所帮助。

    【讨论】:

    • 然后只覆盖'Equals'并进行一次比较-然后您的xUnit测试将保持干净。在引用的 MSDN 页面上也有一个很好的例子