Comment tester la fonction hashCode() dans les tests unitaires ?
public int hashCode(){
int result = 17 + hashDouble(re);
result = 31 * result + hashDouble(im);
return result;
}
Comment tester la fonction hashCode() dans les tests unitaires ?
public int hashCode(){
int result = 17 + hashDouble(re);
result = 31 * result + hashDouble(im);
return result;
}
Chaque fois que je remplace le code d'égalité et de hachage, j'écris des tests unitaires qui suivent les recommandations de Joshua Bloch dans le chapitre 3 sur "Java efficace". Je m'assure que le code d'égalité et de hachage est réflexif, symétrique et transitif. Je m'assure également que "pas égal" fonctionne correctement pour tous les membres de données.
Lorsque je vérifie l'appel à equals, je m'assure également que le hashCode se comporte comme il se doit. Comme ça:
@Test
public void testEquals_Symmetric() {
Person x = new Person("Foo Bar"); // equals and hashCode check name field value
Person y = new Person("Foo Bar");
Assert.assertTrue(x.equals(y) && y.equals(x));
Assert.assertTrue(x.hashCode() == y.hashCode());
}
Créez de nombreux (millions d') objets aléatoires reproductibles et ajoutez tous les codes de hachage à un ensemble et vérifiez que vous obtenez presque et de nombreuses valeurs unqiue en tant que nombre d'identifiants générés. Pour les rendre reproductibles aléatoirement, utilisez une graine aléatoire fixe.
Vérifiez également que vous pouvez ajouter ces éléments à un HashSet et les retrouver. (En utilisant un objet différent avec les mêmes valeurs)
Assurez-vous que votre equals() correspond à votre comportement hashCode(). Je vérifierais également que vos champs sont tous définitifs.
Je ne pense pas qu'il soit nécessaire de tester une unité de méthode de hachage. Surtout s'il est généré par votre IDE ou un HashCodeBuilder
(apache commons)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.