To, co opisujesz, może nie być wcale takie złe, ale wskaźnikiem głębszych problemów odkrytych przez twoje testy
Wraz ze zmianami systemu spędzamy więcej czasu na naprawianiu uszkodzonych testów. Posiadamy testy jednostkowe, integracyjne i funkcjonalne.
Gdybyś mógł zmienić kod, a testy by się nie zepsuły, byłoby to dla mnie podejrzane. Różnica między uzasadnioną zmianą a błędem polega tylko na tym, że jest o to poproszony, a to, o co jest proszone, jest (zakładane TDD) zdefiniowane przez twoje testy.
dane zostały zakodowane na stałe.
Dobrze zakodowane dane w testach to dobra rzecz. Testy działają jak fałszerstwa, a nie dowody. Jeśli jest zbyt wiele obliczeń, twoje testy mogą być tautologiami. Na przykład:
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])
Im wyższa abstrakcja, tym bardziej zbliżasz się do algorytmu, a tym samym bliżej porównywania implementacji akutalnej z samym sobą.
bardzo małe ponowne użycie kodu
Najlepsze ponowne użycie kodu w testach to imho „Checks”, podobnie jak w jUnits assertThat
, ponieważ zapewniają prostotę testów. Poza tym, jeśli testy można przefaktoryzować w celu współużytkowania kodu, prawdopodobnie może to być również testowany rzeczywisty kod , redukując w ten sposób testy do testów testujących przebudowaną bazę.