Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 我可以在单元测试中使用DebuggerDisplay信息吗?_Unit Testing_Nunit_Vs Unit Testing Framework_Debuggerdisplay - Fatal编程技术网

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从某个对象的调试器显示属性中计算格式字符串并不是那么简单。这是一个使用编译器的解决方案。我会选择一些对象比较器方法