Comment doit-on unité de tester le hashCode égal contrat?

En un mot, le hashCode contrat, en fonction de Java de l'objet.hashCode():

  1. Le code de hachage ne devrait pas changer à moins que quelque chose de touchant equals() changements
  2. equals() implique des codes de hachage sont ==

Supposons intérêt principalement dans les données immuables objets - leur de l'information ne change jamais une fois qu'ils sont construits, par conséquent, #1 est supposé tenir. Que les feuilles n ° 2: le problème est simplement celui de la confirmation, qui est égal implique code de hachage ==.

Évidemment, on ne peut pas tester tous les moyens imaginables pour objet de données, à moins que l'ensemble est infiniment faible. Alors, quelle est la meilleure façon d'écrire un test unitaire qui est susceptible d'attraper le cas?

Depuis les instances de cette classe sont immuables, il y a peu de façons de construire un tel objet; ce test devrait couvrir tous d'entre eux si possible. Sur le dessus de ma tête, les points d'entrée sont les constructeurs, la désérialisation, et les constructeurs de sous-classes (qui devrait être réductible à l'appel du constructeur de problème).

[Je vais essayer de répondre à ma propre question, à travers la recherche. L'entrée d'autres StackOverflowers est un bienvenue mécanisme de sécurité pour ce processus.]

[Ce qui pourrait être applicable à d'autres langages à objets, donc je vais ajouter cette balise.]