Під час виправлення помилок рекомендується, де я працюю, спочатку написати тест, який не відповідає даній помилку, а потім виправити код, поки тест не пройде. Це слідує практиці TDD, і, мабуть, це буде хорошою практикою, але я помітив, що вона має тенденцію створювати криптичні тести, які дійсно близькі до впровадження.
Наприклад, у нас виникла проблема, коли завдання було надіслано, досягнуто певного стану, було зроблено аборт і повторно. Щоб відтворити цю помилку, був написаний масивний тест із синхронізацією потоків у ній, безліччю глузувань та іншого ... Це зробило роботу, але тепер, коли я перероблю код, я вважаю дуже спокусливим просто видалити цього мамонта, оскільки це дійсно вимагало б багато роботи (знову ж таки), щоб відповідати новому дизайну. І це просто тестування однієї невеликої функції в одному конкретному випадку.
Звідси моє запитання: як ви перевіряєте на помилки, які складно відтворювати? Як уникнути створення речей, які перевіряють реалізацію, а також шкодять рефакторингу та читаності?