断言NameValueCollection是否等效

时间:2012-06-12 06:03:37

标签: c# nunit

有没有人知道如果NameValueCollection是等效的断言的好方法?目前我正在使用NUnit,但CollectionAssert.AreEquivalent()似乎只断言键。不是键和值。

我写了这段小代码来帮助我,但如果有一些开箱即用的东西可以做同样的事情会很好。

private static void AssertNameValueCollectionAreEquivalent(NameValueCollection expectedCollection, NameValueCollection collection)
{
   // Will evaluate keys only
   CollectionAssert.AreEquivalent(expectedCollection, collection);

   foreach (string namevalue in collection)
   {
      Assert.AreEqual(expectedCollection[namevalue], collection[namevalue]);
   }
}

2 个答案:

答案 0 :(得分:3)

我是NUnit Fluent Assertions的粉丝。不仅语法流畅而且更简洁,而且它们使一些断言更容易,而且这是其中之一。

考虑:

var c = new NameValueCollection();
var c2 = new NameValueCollection();

c.Add("test1", "testvalue1");
c.Add("test2", "testvalue2");

c2.Add("test1", "testvalue1");
c2.Add("test2", "testvalue2");

c.Should().BeEquivalentTo(c2); // assertion succeeds

答案 1 :(得分:1)

如何将其转换为Dictionary并断言为:

CollectionAssert.AreEquivalent(
    expectedCollection.AllKeys.ToDictionary(k => k, k => expectedCollection[k]),
    collection.AllKeys.ToDictionary(k => k, k => collection[k]));