用 Xunit 比较两个列表
comparing two lists with Xunit
我正在使用 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
实现,要么比较自定义字段和属性,而不是使用 ==
运算符。
我正在使用 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
实现,要么比较自定义字段和属性,而不是使用 ==
运算符。