2012-06-12 68 views
2

有誰知道的斷言,如果一個NameValueCollection中相當於一個好辦法?目前我正在使用NUnit,但CollectionAssert.AreEquivalent()似乎只是聲明瞭這些鍵。不是鍵和值。斷言如果NameValueCollection中相當於

我寫了這一小段代碼,以幫助我,但好像有什麼事外的開箱即可以做同樣這將是很好。

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]); 
    } 
} 
+1

你至少應該改變名*你的方法 - 你不能只是斷言集合。你必須聲明一些關於集合的東西,在這種情況下,它與預期的集合是等價的。 (這也讓我在你的代碼之前的文本中感到困惑。) –

+0

更改了方法名稱和更新的文本和標題以更好地反映我的問題。 – Markus

回答

1

如何將其轉換爲字典和斷言:

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

工程就像一個魅力! :) 雖然這是相當多的寫作。但如果你不能使用解決方案HackedByChinese建議我認爲這是好的。 – Markus

+1

我必須補充一點,這比我上面的代碼示例要好得多,因爲實際上看到差異在值中的位置要容易得多。再次感謝! – Markus

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 
+0

這看起來不錯,但應該()不是常規NUnit的一部分,還是我誤解了? – Markus

+0

'應該'是Fluent斷言的一部分,您可以從NuGet或這裏下載:http://fluentassertions.codeplex.com – HackedByChinese

+0

好!我一定會檢查出來,不確定可以在這個項目中使用。但謝謝你的提示。 :) – Markus