Unit testing - сравняване за еднаквост на два обекта и удачно ли е с конкретния подход
Здравейте,
При unit тестване ми се налага да тествам за еднаквост на два обекта, но естествено не искам да променям техните класове да имплементират интерфейси за сравняване само за тази цел. В тази тема видях подход който много ми хареса - https://stackoverflow.com/questions/38382937/how-to-test-equality-of-two-objects-in-unit-tests
А именно, създавам един помощен клас който имплементира IEqualityComparer<Person> и съответно си задавам логиката за сравняване:
След това в същинския клас си инстанцирам един такъв клас като поле и му ползвам Equals метода:
https://github.com/gaydov/Softuni-OOP-Advanced/blob/master/6UnitTests/ExtendedDb.Tests/DbTests.cs
Така се отделя цялата тестваща логика отделно от класовете които тества и затова ми допада.
Това удачен подход ли е в такива случаи?
Относно Equals поведението - в задачата има точно какви характеристики да притежава класът и затова не съм добавял други.
1. Изпуснал съм го. Съгласен съм, че е по-добре с интерфейс и го оправих.
2. При добавянето на readonly мисля че Resharper ми добави и static след като ме пита нещо. Махнах го.
3. Четох, че вграденото генериране на хеш код на анонимни обекти работи доста прилично в .NET и затова го направих така.
4. От съвсем скоро работя с unit тестове и с NUNIT респективно и затова засега ги структурирам както на мен ми е по-интуитивно, както сам каза.
Благодаря за добрите съвети.