【问题标题】:MSTest Assert.AreEqual problemsMSTest Assert.AreEqual 问题
【发布时间】:2011-10-22 16:33:27
【问题描述】:

所以我生成一个空的Dictionary<string,string> 来与我的测试结果进行比较,然后我这样做:

Assert.AreEqual(retval, temp);

即使它们包含相同的确切数据,它也会失败。我也尝试过像这样使用IsTrueAssert.IsTrue(retval.Equals(temp));,即使它们相同,它也会失败。

我怎样才能只比较元素,而不是我假设它正在做的同一个内存位置?

谢谢。

【问题讨论】:

    标签: c# .net unit-testing mstest


    【解决方案1】:

    你看过了吗

    .NET Dictionaries have same keys and values, but aren't "equal"

    看起来很完整的答案。

    【讨论】:

    • 这里的顺序很重要,我只是想比较包含的元素。
    • @Dean 的想法是正确的。除非您使用 CollectionAssert 方法,否则您无法在 MSTest 中比较集合的相等性。
    【解决方案2】:

    您可以使用Assert.IsTrue(retval.SequenceEqual(temp)),尽管这也需要字典中元素的顺序相同。我不确定你是否希望你的平等测试那么严格。

    请参阅this question 及其答案,了解比较字典内容的方法,而不考虑顺序。

    【讨论】:

    • 由于字典中元素的顺序是未定义的,SequenceEqual 永远不能保证工作。
    • @CodeInChaos,这是否意味着即使字典的内容没有被修改,枚举之间的顺序也可能会发生变化?我不是不同意你的观点,只是想了解为什么 SequenceEqual 不起作用。
    • 它不会在枚举之间改变,但不能保证包含相同元素的两个字典实例将以相同的顺序枚举。实际上,如果您以相同的顺序对它们进行所有修改,它可能会具有相同的顺序,但不能保证有效。
    猜你喜欢
    • 2011-06-16
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    相关资源
    最近更新 更多