Assert.AreEqual<T> nepoužívá generickou komparaci pomocí interface IEquatable<T>

V unit testu porovnávající výsledek volání metody která vrací strukturu, jsem použil typickou generickou metodu Assert.AreEqual<T> očekávajíce, že v dané struktuře zavolá metodu implementovaného interface IEquatable<T>.Equals().To se však nestalo. Toto chování je dokonce hlášeno jako chyba, ovšem jak to už často bývá, je vždy třeba hledat chybu nejdříve ve svém kódu.

 

Při implementaci interface IEquatable<T> je totiž nutné vždy implementovat i negenerickou variantu přepsáním metod Object.Equals (a tím i Object.GetHashCode). Skutečnost že generická metoda Assert.AreEqual<T> volá negenerickou variantu porovnání je sice trochu nelogická, nicméně podle zásad implementace shodnoti objektů to není chybné chování. Podobně je to i s implementací generických iterátorů, kdy je třeba vždy implementovat i negenerickou variantu IEnumerable.GetEnumerator.

Komentáře jsou uzavřeny