【问题标题】:How to Assert Dictionaries in Unit Testing如何在单元测试中断言字典
【发布时间】:2013-07-11 11:14:10
【问题描述】:

你知道我如何断言两个类型的字典

Dictionary<string,List<string>>

在我的单元测试项目中?

我尝试使用 CollectionsAssert 但它对我不起作用。我想它需要简单的字典作为参数(例如Dictionary&lt;string,string&gt;)。我想我的问题来自字典的第二个参数。你知道如何断言这两个字典吗?

【问题讨论】:

  • 你使用什么测试框架?

标签: c# unit-testing collections dictionary


【解决方案1】:

可以给你一个很好的错误信息的方法之一:

public string ToAssertableString(IDictionary<string,List<string>> dictionary) {
    var pairStrings = dictionary.OrderBy(p => p.Key)
                                .Select(p => p.Key + ": " + string.Join(", ", p.Value));
    return string.Join("; ", pairStrings);
}

// ...
Assert.AreEqual(ToAssertableString(dictionary1), ToAssertableString(dictionary2));

【讨论】:

  • 如果字典将对象列表作为值保存怎么办?
【解决方案2】:

使用 Linq:

Dictionary.All(e => AnotherDictionary.Contains(e))

【讨论】:

  • 很好...只需要确保添加using System.Linq;
  • 这适用于 C# 3.0 及更高版本。对于 C# 2.0,可以使用:delegate(KeyValuePair&lt;string, string&gt; e) { return properties.Contains(e); }
  • 这只是检查 AnotherDictionary 是 Dictionary 的超集。并不是说他们是平等的。
猜你喜欢
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
相关资源
最近更新 更多