【问题标题】:comparing two lists with Xunit用 Xunit 比较两个列表
【发布时间】:2017-07-24 15:49:10
【问题描述】:

我正在使用 xunit 进行单元测试,我有一个预期对象列表和一个实际对象列表。如何比较两个列表中每个对象(日期)的特定元素以查看它们是否相等?我找到了 Assert.Collection 方法,但我不知道它如何比较两个列表的内容。

【问题讨论】:

    标签: c# assert xunit.net


    【解决方案1】:

    您不需要 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 实现或比较自定义字段和属性,而不是使用 == 运算符。

    【讨论】:

    • 感谢您的帮助,现在测试通过了。我没有任何选项可以将此标记为答案
    • @proteus 应该是投票按钮附近的标志stackoverflow.com/help/accepted-answer
    • 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,但是收藏不一样
    • @Abedron 注意到,我认为检查 shouldList 中的所有项目是否在 isList 中都相同是不够的。您需要检查其他方式以避免已识别的问题:Assert.True(isList.All(isItem => shouldList.Any(shouldItem => isItem == shouldItem)));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    • 2021-10-03
    • 2011-02-15
    相关资源
    最近更新 更多