Was Sie beschreiben, ist vielleicht gar nicht so schlecht, aber ein Hinweis auf tiefere Probleme, die Ihre Tests entdecken
Wenn sich das System ändert, verbringen wir mehr Zeit damit, kaputte Tests zu reparieren. Wir haben Unit-, Integrations- und Funktionstests.
Wenn Sie Ihren Code ändern könnten und Ihre Tests nicht abbrechen würden, wäre das für mich verdächtig. Der Unterschied zwischen einer legitimen Änderung und einem Fehler besteht nur in der Tatsache, dass sie angefordert wird. Was angefordert wird, wird von Ihren Tests definiert (vorausgesetzt TDD).
Daten wurden fest codiert.
Fest codierte Daten in Tests sind imho eine gute Sache. Tests funktionieren als Fälschungen, nicht als Beweise. Wenn zu viel berechnet wird, sind Ihre Tests möglicherweise Tautologien. Beispielsweise:
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])
Je höher die Abstraktion, desto näher kommt man dem Algorithmus und damit dem Vergleich der tatsächlichen Implementierung mit sich selbst.
sehr wenig Wiederverwendung von Code
Die beste Wiederverwendung von Code in Tests ist imho 'Checks', wie in jUnits assertThat
, weil sie die Tests einfach halten. Wenn die Tests so umgestaltet werden können, dass sie Code gemeinsam nutzen, ist dies wahrscheinlich auch der tatsächlich getestete Code , wodurch die Tests auf diejenigen reduziert werden, die die umgestaltete Basis testen.