В двух словах, контракт hashCode, согласно Java object.hashCode():
- Хэш-код не должен изменяться, если только что-то не влияет на значения equals()
- equals() означает, что хэш-коды == ==/
Предположим, что интерес в первую очередь относится к неизменяемым объектам данных - их информация никогда не изменяется после их построения, поэтому предполагается, что # 1 сохраняется. Это оставляет # 2: проблема заключается лишь в подтверждении того, что equals означает хэш-код ==.
Очевидно, что мы не можем тестировать каждый мыслимый объект данных, если только этот набор тривиально мал. Итак, что лучший способ написать unit test, который, вероятно, поймает общие случаи?
Поскольку экземпляры этого класса являются неизменяемыми, существуют ограниченные способы построения такого объекта; этот unit test должен охватывать все, если это возможно. В верхней части моей головы точки входа - это конструкторы, десериализация и конструкторы подклассов (которые должны быть приведены к проблеме вызова конструктора).
[Я попытаюсь ответить на свой вопрос через исследование. Вход от других StackOverflowers является надежным механизмом безопасности для этого процесса.]
[Это может быть применимо к другим языкам OO, поэтому я добавляю этот тег.]