Ciò che descrivi potrebbe non essere una cosa così brutta, ma un puntatore a problemi più profondi che i tuoi test scoprono
As the system changes we find ourselves spending more time fixing broken tests. We have unit, integration and functional tests.
Se potessi cambiare il tuo codice e i tuoi test non non si interromperanno, ciò sarebbe sospetto per me. La differenza tra una modifica legittima e un bug è solo il fatto che è richiesto, e ciò che viene richiesto è (presupposto di TDD) definito dai test.
data has been hard coded.
I dati hard coded nei test sono una buona cosa. I test funzionano come falsificazioni, non come prove. Se ci sono troppi calcoli, i test potrebbero essere tautologici. Ad esempio:
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])
Più è alta l'astrazione, più si avvicina all'algoritmo e più vicino si confronta l'implementazione acuta a se stessa.
very little reuse of code
Il miglior riutilizzo del codice nei test è imho 'Checks', come in jUnits assertThat
, perché mantengono i test semplici.
Oltre a ciò, se i test possono essere refactoring per condividere il codice, probabilmente il codice testato potrebbe essere , riducendo così i test a quelli che testano la base refactored.