就像是:
Assert.AreEqual("Id=7, Name=John", someClass.DebuggerInfo);
就像是:
Assert.AreEqual("Id=7, Name=John", someClass.DebuggerInfo);
我认为最好覆盖您Equals
的GetHashCode
方法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 编译器的帮助下评估调试器显示值,如此处所述。但我不认为使用调试器元数据是检查对象相等性的好方法。