1

就像是:

Assert.AreEqual("Id=7, Name=John", someClass.DebuggerInfo);
4

1 回答 1

0

我认为最好覆盖您EqualsGetHashCode方法SomeClass来比较 Id 和 Name 属性:

public class SomeClass
{
    public int Id { get; set; }
    public string Name { get; set; }       

    public override bool Equals(object obj)
    {
        SomeClass other = obj as SomeClass;
        if (other == null)
            return false;

        return other.Id == Id && other.Name == Name;
    }

    // GetHashCode implementation
}

断言将如下所示:

Assert.AreEqual(expectedObject, someClass);

如果您不想或不能更改SomeClass实现,那么您可以创建将进行断言的方法:

public void AssertAreEqual(SomeClass expected, SomeClass actual)
{
    Assert.AreEqual(expected.Id, actual.Id);
    Assert.AreEqual(expected.Name, actual.Name);
}

评估调试器显示字符串不是简单的任务,因为DebuggerDisplayAttribute只包含格式字符串,它用于评估调试器中对象的字符串表示。除了简单的属性名称之外,该字符串还可以包含表达式和方法调用。您可以在Roslyn 编译器的帮助下评估调试器显示值,如此处所述。但我不认为使用调试器元数据是检查对象相等性的好方法。

于 2013-10-22T12:34:11.863 回答