У двох словах, контракт hashCode, відповідно до об'єкта Java.hashCode ():
- Хеш-код не повинен змінюватися, якщо не зміниться щось, що впливає на equals ()
- equals () передбачає, що хеш-коди = =
Давайте припустимо, що інтерес насамперед стосується незмінних об’єктів даних - їх інформація ніколи не змінюється після їх побудови, тому передбачається, що №1 має місце. Залишається # 2: проблема полягає лише в тому, щоб підтвердити, що дорівнює, означає хеш-код ==.
Очевидно, що ми не можемо перевірити кожен мислимий об’єкт даних, якщо цей набір не є тривіально малим. Отже, який найкращий спосіб написати модульний тест, який, ймовірно, охоплює типові випадки?
Оскільки екземпляри цього класу незмінні, існує обмежений спосіб побудови такого об'єкта; цей одиничний тест повинен охоплювати їх усіх, якщо це можливо. Зверху моєї голови точками входу є конструктори, десеріалізація та конструктори підкласів (які повинні бути зведені до проблеми виклику конструктора).
[Я спробую відповісти на власне запитання за допомогою дослідження. Вхідні дані від StackOverflowers - це вітальний механізм безпеки для цього процесу.]
[Це може бути застосовним до інших мов OO, тому я додаю цей тег.]