我可以在单元测试中使用DebuggerDisplay信息吗?

时间:2013-10-22 12:29:20

标签: unit-testing nunit vs-unit-testing-framework debuggerdisplay

类似的东西:

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

1 个答案:

答案 0 :(得分:0)

我认为最好覆盖Equals的{​​{1}}和GetHashCode方法来比较Id和Name属性:

SomeClass

断言将如下:

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); } 只包含格式字符串,用于评估调试器中对象的字符串表示形式。除简单属性名称之外的该字符串还可以包含表达式和方法调用。您可以在Roslyn编译器的帮助下评估调试器显示值,如here所述。但我不认为调试器元数据的使用是检查对象相等性的好方法。