Cuando se corrigen errores, se recomienda que, donde trabajo, escriba primero una prueba que falla con el error dado y luego corrija el código hasta que pase la prueba. Esto sigue las prácticas de TDD, y se supone que es una buena práctica, pero noté que tiende a producir pruebas crípticas que se acercan mucho a la implementación.
Por ejemplo, tuvimos un problema cuando se envió un trabajo, alcanzó un cierto estado, se abortó y se volvió a intentar. Para reproducir este error, se escribió una prueba masiva con sincronización de subprocesos, muchas burlas y demás ... Hizo el trabajo, pero ahora que estoy refactorizando el código, me resulta muy tentador eliminar este mamut, ya que Realmente requeriría mucho trabajo (nuevamente) para adaptarse al nuevo diseño. Y solo está probando una pequeña característica en un solo caso específico.
De ahí mi pregunta: ¿cómo se prueban los errores que son difíciles de reproducir? ¿Cómo evita crear cosas que prueben la implementación y dañen la refactorización y la legibilidad?