2

我正在尝试比较 2 个对象expectedItemsresultItems类型IEnumerable<IDictionary<string, object>>,但无法用它做很多事情。

此外,一个字典在代码中初始化,另一个字典是从外部 API 的 JSON 响应构建的。由于 JSON 并不真正关心对象内属性的顺序,SequenceEquals因此排除了 a。

我确实有两个相等的对象,所有这些低调的方法都失败了,
首先,

CollectionAssert.AreEqual(expectedItems, resultItems)

第二,

var expectedItems = entries.Select(e => e.Serialize()).ToList();
resultItems.Zip(expectedItems,(objects, dictionary) => 
objects.OrderBy(pair =>pair.Key).SequenceEqual(dictionary.OrderBy(pair => pair.Key)))
                                   .Should()
                                   .NotContain(false);

对象(据我所知)是相等的。

在此处输入图像描述

我可以尝试的任何事情,或者我目前做错的事情?

编辑
API 从时间戳中修剪滴答计数,这就是失败的原因。如何修剪 expectedItems 字典中的时间戳,然后进行比较?因此,集合必须相同,并且需要覆盖时间戳的比较。任何人? 在此处输入图像描述

4

2 回答 2

1

要检查的两件事:

  1. 对象是否预先实现了该Equals()方法?如果不相等,只需检查引用,因为它们是两个不同的实例,它们看起来是不同的。另一种选择可能是,因为您的对象代表时间戳,正如我从图片中猜测的那样。
  2. 即使它正确实现了 Equals,即使就毫秒(如果存在)部分而言,对象是否相同?
于 2013-10-03T07:05:27.153 回答
1

你为什么不安装FluentAssertions并做这样的事情呢?

resultsItem.ShouldAllBeEquivalentTo(expectedItems);

我不知道 DateTime 比较的限制性有多大,但是您可以轻松地覆盖特定属性的行为。

于 2013-10-03T12:57:29.353 回答