gpt4 book ai didi

.net - 单元测试中的对象比较

转载 作者:行者123 更新时间:2023-12-03 23:29:06 25 4
gpt4 key购买 nike

我的单元测试中有两个对象,实际对象和预期对象。对象方法的所有属性都完全相同,如果我运行以下测试:

Assert.AreEqual( expectedObject.Property1, actualObject.Property1);

结果按预期通过。但是,当我尝试运行以下测试时,它失败了:
Assert.AreEqual (expectedObject, actualObject);

我错过了什么?可以不比较两个对象吗,我是否必须检查每个属性?

最佳答案

您需要覆盖 Equals为您的对象。 Assert用途 Object.Equals .默认情况下,Object.Equals在引用类型的对象上执行引用比较。也就是说,一个引用类型的两个实例是相等的,当且仅当它们引用同一个对象。您想要覆盖它,以便执行值比较而不是执行引用比较。这是一个非常好的MSDN article就此主题而言。请注意,您还需要覆盖 GetHashCode .请参阅 guidelines 的 MSDN .这是一个简单的例子:

前:

class Test {
public int Value { get; set; }
}

Test first = new Test { Value = 17 };
Test second = new Test { Value = 17 };
Console.WriteLine(first.Equals(second)); // false

后:
class Test {
public int Value { get; set; }
public override bool Equals(object obj) {
Test other = obj as Test;
if(other == null) {
return false;
}
return this.Value == other.Value;
}
public override int GetHashCode() {
return this.Value.GetHashCode();
}
}

Test first = new Test { Value = 17 };
Test second = new Test { Value = 17 };
Console.WriteLine(first.Equals(second)); // true

关于.net - 单元测试中的对象比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2207767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com