【问题标题】:NUnit: Dictionary AssertNUnit:字典断言
【发布时间】:2009-10-30 10:59:49
【问题描述】:

我想要一个 一个衬里,在 NUnit 中,它断言两个字典是否相同。即,我想要以下代码的简洁版本:

public static void DictionaryAssert<T, U>(Dictionary<T, U> dictionaryResult, Dictionary<T, U> expectedResult)
{
    Assert.AreEqual(dictionaryResult.Count, expectedResult.Count);
    foreach (var aKey in expectedResult.Keys)
    {
        Assert.AreEqual(expectedResult[aKey], dictionaryResult[aKey]);
    }
}

当然没那么难,但我找不到参考,有什么想法吗?

【问题讨论】:

    标签: c# dictionary nunit


    【解决方案1】:

    看看CollectionAssert.AreEquivalent。这将断言两个字典具有相同的内容,但不一定是相同的实例。

    【讨论】:

    • 我以为它们只适用于 IEnumerable?根据我的测试,字典似乎不起作用。
    • Dictionary 实现 IEnumerable。您使用的是哪个版本?它适用于 NUnit v2.4。
    • 我想我同意你的看法;但是我最后一次使用 CollectionAssert.AreEquivalent 我的字典比较失败了。 nvm,我会先接受你的回答。
    • NUnit documentation 另有说明:“如果两个集合以相同的顺序包含相同的对象,则 AreEqual 重载成功。AreEquivalent 测试集合是否包含相同的对象,而不考虑顺序。”
    • CollectionAssert.AreEquivalent 仅在键和值类型是结构时才有效。由于默认情况下是使用引用相等。如果那些泛型参数是引用类型,即使对象包含相同的数据(但不同的引用),断言也会失败。
    【解决方案2】:

    尝试使用CollectionAssert.AreEqual CollecitonAssert.AreEquivalent

    两者都会比较集合的项目(而不是集合的引用),但是as discussed before,不同的是集合中项目的顺序:

    • AreEqual - 集合必须具有相同的计数,并且以相同的顺序包含完全相同的项目。
    • AreEquivalent - 集合必须包含相同的项目,但匹配可以是任何顺序。

    【讨论】:

      【解决方案3】:

      您可以使用一个名为 Should 的库来编写与框架无关的断言。它还有一个非常好的流畅语法,如果你喜欢流畅的界面,可以使用它。我有一篇与此相关的博客文章。

      http://nileshgule.blogspot.com/2010/11/use-should-assertion-library-to-write.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-10
        • 2011-06-27
        • 2012-08-15
        • 1970-01-01
        • 2013-03-16
        • 1970-01-01
        • 2013-01-07
        相关资源
        最近更新 更多