【发布时间】:2013-10-22 12:29:20
【问题描述】:
类似:
Assert.AreEqual("Id=7, Name=John", someClass.DebuggerInfo);
【问题讨论】:
标签: unit-testing nunit vs-unit-testing-framework debuggerdisplay
类似:
Assert.AreEqual("Id=7, Name=John", someClass.DebuggerInfo);
【问题讨论】:
标签: unit-testing nunit vs-unit-testing-framework debuggerdisplay
我认为最好覆盖 SomeClass 的 Equals 和 GetHashCode 方法来比较 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 编译器的帮助下评估调试器显示值,如 here 所述。但我不认为使用调试器元数据是检查对象相等性的好方法。