2012-06-12 4 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

멋지게 보이지만 Should()가 일반 NUnit의 일부가 아니거나 내가 잘못 했습니까? – Markus

+0

'Should'는 Fluent Assertions의 일부로, NuGet 또는 여기에서 다운로드 할 수 있습니다 : http://fluentassertions.codeplex.com – HackedByChinese

+0

Nice! 나는 그것을 확실히 체크 할 것이지만,이 프로젝트에서 사용하는 것은 괜찮은지 확신 할 수 없다. 하지만 팁 주셔서 감사합니다. :) – Markus

관련 문제