Tout test de logiciel est comme "Proof By Example", pas seulement les tests unitaires utilisant un outil comme JUnit. Et ce n'est pas une nouvelle sagesse, il y a une citation de Dijkstra de 1960, qui dit essentiellement la même chose:
"Les tests montrent la présence, pas l'absence de bugs"
(il suffit de remplacer les mots "montre" par "preuves"). Cependant, cela est également vrai pour les outils qui génèrent des données de test aléatoires. Le nombre d'entrées possibles pour une fonction du monde réel est généralement plus élevé par ordre de grandeur que le nombre de cas de test que l'on peut produire et vérifier par rapport à un résultat attendu à l'ère de l'univers, indépendamment de la méthode de génération de ces cas, donc même si l'on utilise un outil générateur pour produire beaucoup de données de test, il n'y a aucune garantie de ne pas manquer le seul cas de test qui aurait pu détecter un certain bug.
Les tests aléatoires peuvent parfois révéler un bogue qui a été ignoré par les cas de test créés manuellement. Mais en général, il est plus efficace de créer soigneusement des tests pour la fonction à tester et de s'assurer que l'on obtient un code complet et une couverture de branche avec le moins de cas de test possible. Parfois, il est possible de combiner des tests générés manuellement et aléatoirement. De plus, lors de l'utilisation de tests aléatoires, il faut veiller à obtenir des résultats reproductibles.
Les tests créés manuellement ne sont donc en aucun cas pires que les tests générés de manière aléatoire, souvent bien au contraire.