Unit testing 我可以在单元测试中使用DebuggerDisplay信息吗?
比如:Unit testing 我可以在单元测试中使用DebuggerDisplay信息吗?,unit-testing,nunit,vs-unit-testing-framework,debuggerdisplay,Unit Testing,Nunit,Vs Unit Testing Framework,Debuggerdisplay,比如: Assert.AreEqual("Id=7, Name=John", someClass.DebuggerInfo); 我认为最好重写SomeClass的Equals和GetHashCode方法来比较Id和Name属性: public class SomeClass { public int Id { get; set; } public string Name { get; set; } public override bool Equals(
Assert.AreEqual("Id=7, Name=John", someClass.DebuggerInfo);
我认为最好重写
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编译器的帮助下计算调试器显示值,如下所述。但我不认为使用调试器元数据是检查对象相等性的好方法。您知道,它是一个外部类,具有此属性集,因此我无法修改它。我不想只为了测试目的而重写它。Ofc,我可以自己收集这些属性值,但使用我提供的伪代码不是很方便吗?)@dbardakov从某个对象的调试器显示属性中计算格式字符串并不是那么简单。这是一个使用编译器的解决方案。我会选择一些对象比较器方法