2012-04-20 26 views
8

çalışıyorum Failing'e Ama bir istisnaCollectionAssert.AreEqual ben <pre><code>CollectionAssert.AreEqual(ListExpected, ListActual); </code></pre> <p></p> kullanarak iki Listelerini karşılaştırmak

Expected and actual are both <System.Collections.Generic.List`1[API.Program.Relation]> with 11 elements 
    Values differ at index [0] 
    Expected: <API.Program.Relation> 
    But was: <API.Program.Relation> 

alıyorum Ama saha herşeyi tarafından sahada Assert.AreEqual kullanarak sıfır eleman karşılaştırıldığında oldu ince. Ben CollectionAssert

+0

Gerçekten eşittirler mi? Tüm veriler aynı olsa bile, aynı örnek olmayabilir. – Tejs

+3

, "Equals" ve "GetHashCode" uygulamalarını doğru olarak karşılaştırarak karşılaştırdığınız koleksiyonlardaki öğelerdir. –

+0

Madde sıfırın referansları aynı mıydı yoksa sadece alan değerleri mi? – ken

cevap

11

kullanarak karşılaştırmak olamaz neden

herhangi bir fikir olan bir cisim Equals(object other) yöntemi true dönerse NET'te başka bir nesneye eşit "ilan" olduğunu. API.Program.Relation sınıfınız için bu yöntemi uygulamanız gerekir, aksi halde. NET, referans-eşit olmadıkça, nesnelerinizi farklı görür. Tüm alanların aynı olduğu gerçeği .NET için önemli değildir: Eğer alandaki eşitlik semantiğine ihtiyacınız varsa, bunu destekleyen Equals bir uygulama sağlamanız gerekir.

Equals'u geçersiz kıldığınızda, GetHashCode'u geçersiz kılmayı da unutmayın - bunlar birlikte geçersiz kılınmalıdır.

sen istemiyoruz veya herhangi bir nedenle Equals geçersiz kılamaz ise, toplama elemanları karşılaştırarak yardımcı olmak IComparer bir örneğini alır an overload of CollectionAssert.AreEqual kullanabilirsiniz.

+3

Ve Eşittir/GetHashCode'u geçersiz kıldığınızda, sınıfı da değişmez yapmayı düşünün. –

+0

@HenkHolterman veya en azından eşitlik ve karma kodunu hesaplamak için kullanılan alanlar – phoog

İlgili konular