【发布时间】:2017-07-24 15:49:10
【问题描述】:
我正在使用 xunit 进行单元测试,我有一个预期对象列表和一个实际对象列表。如何比较两个列表中每个对象(日期)的特定元素以查看它们是否相等?我找到了 Assert.Collection 方法,但我不知道它如何比较两个列表的内容。
【问题讨论】:
我正在使用 xunit 进行单元测试,我有一个预期对象列表和一个实际对象列表。如何比较两个列表中每个对象(日期)的特定元素以查看它们是否相等?我找到了 Assert.Collection 方法,但我不知道它如何比较两个列表的内容。
【问题讨论】:
您不需要 XUnit 细节。这个问题可以通过使用LINQ来解决。
要比较列表中的元素,只需使用:
Assert.True(isList[1] == shouldList[1]);
只需直接访问列表内容。如果不知道索引,可以使用 LINQ:
Assert.True(shouldList.Any(x => x == isList[1]);
这将检查shouldList 是否包含任何等于isList 中的第二个元素的元素。
如果你想在不知道顺序的情况下比较列表内容是否相同,请使用以下内容:
Assert.True(shouldList.All(shouldItem => isList.Any(isItem => isItem == shouldItem)));
这会检查shouldList 中的所有项目isList 中的至少一项是否相同。
备注:
我使用== 运算符进行比较。这是否有效取决于列表的内容。你说你在比较日期,这里equals 将检查是否相等,而不是身份。对于大多数引用类型,equals 只会比较身份。在这里,您必须覆盖默认的 equals 实现或比较自定义字段和属性,而不是使用 == 运算符。
【讨论】:
var c1 = new int[] {1, 2, 2}; var c2 = new int[] {1, 2, 3}; Assert.True(c1.All(shouldItem => c2.Any(isItem => isItem == shouldItem)));这个pass,但是收藏不一样
Assert.True(isList.All(isItem => shouldList.Any(shouldItem => isItem == shouldItem)));