Lo que usted describe en realidad puede no ser tan malo, sino un indicador de problemas más profundos que descubren sus pruebas
A medida que cambia el sistema, nos encontramos pasando más tiempo arreglando pruebas rotas. Contamos con pruebas unitarias, integrales y funcionales.
Si pudiera cambiar su código, y sus pruebas no se romperían, eso sería sospechoso para mí. La diferencia entre un cambio legítimo y un error es solo el hecho de que se solicita, y lo que se solicita es (se supone TDD) definido por sus pruebas.
Los datos han sido codificados.
Los datos codificados en las pruebas son, en mi opinión, algo bueno. Las pruebas funcionan como falsificaciones, no como pruebas. Si hay demasiado cálculo, sus pruebas pueden ser tautologías. Por ejemplo:
assert sum([1,2,3]) == 6
assert sum([1,2,3]) == 1 + 2 + 3
assert sum([1,2,3]) == reduce(operator.add, [1,2,3])
Cuanto mayor sea la abstracción, más se acercará al algoritmo y, por eso, más cerca de comparar la implementación aguda con sí mismo.
muy poca reutilización de código
La mejor reutilización de código en las pruebas es en mi opinión 'Verificaciones', como en jUnits assertThat
, porque mantienen las pruebas simples. Además de eso, si las pruebas pueden ser refactorizadas para compartir código, el código real probado probablemente también lo sea , reduciendo así las pruebas a las que prueban la base refactorizada.