Podczas poprawiania błędów zaleca się, aby najpierw napisać test, który nie powiedzie się z danym błędem, a następnie naprawić kod, dopóki test się nie powiedzie. Jest to zgodne z praktykami TDD i powinno być dobrą praktyką, ale zauważyłem, że ma tendencję do tworzenia tajemniczych testów, które są bardzo zbliżone do implementacji.
Na przykład mieliśmy problem, gdy zadanie zostało wysłane, osiągnęło określony stan, zostało przerwane i ponowione. Aby odtworzyć ten błąd, napisano obszerny test z synchronizacją wątków, mnóstwem szyderstw i tym podobnych ... Udało się, ale teraz, gdy refaktoryzuję kod, bardzo kuszące jest po prostu usunięcie tego mamuta, ponieważ to naprawdę wymagałoby dużo pracy (ponownie), aby dopasować nowy projekt. I to tylko testowanie jednej małej funkcji w jednym konkretnym przypadku.
Stąd moje pytanie: w jaki sposób testujesz błędy, które są trudne do odtworzenia? Jak uniknąć tworzenia rzeczy, które testują implementację oraz szkodzi refaktoryzacji i czytelności?