gpt4 book ai didi

c# - 比较 MbUnit 中相同的两个对象

转载 作者:行者123 更新时间:2023-11-30 17:22:18 24 4
gpt4 key购买 nike

从 MBUnit 我试图检查两个对象的值是否相同使用

Assert.AreSame(RawDataRow, result);

但是我遇到了以下失败:

Expected Value & Actual Value : {RawDataRow: CentreID = "CentreID1",
CentreLearnerRef = "CentreLearnerRef1",
ContactID = 1, DOB = 2010-05-05T00:00:00.0000000,
Email = "Email1", ErrorCodes = "ErrorCodes1",
ErrorDescription = "ErrorDescription1", FirstName = "FirstName1"}

备注:两个值在格式化时看起来相同,但它们是不同的实例。

我不想遍历每个属性。我可以从 MbUnit 执行此操作吗?

最佳答案

基本上,Assert.AreEqual使用 Object.Equals()验证实际实例和预期实例之间的相等性,而 Assert.AreSame使用 Object.ReferenceEquals .

如果你的类没有实现任何内置的平等机制;例如通过覆盖 Object.Equals ,您最终会遇到您描述的问题,因为 MbUnit不知道如何比较被测类型的两个实例。

有几种解决方案。其中之一是 Coppermill 的解决方案:您可能希望实现基于反射的结构相等比较器。但是 MbUnit 已经内置了一个 feature like that .它叫做StructuralEqualityComparer<T>而且它非常易于使用。那么为什么要重新发明轮子呢?

Assert.AreSame(RawDataRow, result, new StructuralEqualityComparer<MyDataRow>
{
{ x => x.CentreID },
{ x => x.CentreLearnerRef, (a, b) => a.Equals(b, StringComparison.OrdinalIgnoreCase) },
{ x => x.ContactID },
// You can customize completely the comparison process...
});

无论如何,我建议您阅读那篇文章:http://interfacingreality.blogspot.com/2009/09/equality-assertions-in-mbunit-v3.html

您可能还想阅读 that article在 Gallio wiki 中。

关于c# - 比较 MbUnit 中相同的两个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2788278/

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