Lors de la correction de bogues, il est recommandé, lorsque je travaille, d'écrire d'abord un test qui échoue avec le bogue donné, puis de corriger le code jusqu'à ce que le test réussisse. Cela suit les pratiques TDD et est censé être une bonne pratique, mais j'ai remarqué que cela tend à produire des tests cryptiques qui se rapprochent vraiment de l'implémentation.
Par exemple, nous avons eu un problème lorsqu'un travail a été envoyé, a atteint un certain état, a été abandonné et a recommencé. Pour reproduire ce bogue, un test massif a été écrit avec la synchronisation des threads, beaucoup de moqueries et d'autres choses ... Il a fait le travail, mais maintenant que je refactorise le code, je trouve très tentant de supprimer ce mammouth, car cela nécessiterait vraiment (encore) beaucoup de travail pour s'adapter au nouveau design. Et il ne fait que tester une petite fonctionnalité dans un seul cas spécifique.
D'où ma question: comment tester les bugs difficiles à reproduire? Comment évitez-vous de créer des éléments qui testent l'implémentation et nuisent à la refactorisation et à la lisibilité?