Ich glaube, das ist ein Missverständnis, wie ich es mir vorstellen kann.
Der Testcode, der den Produktionscode testet, ist überhaupt nicht ähnlich. Ich werde in Python demonstrieren:
def multiply(a, b):
"""Multiply ``a`` by ``b``"""
return a*b
Dann wäre ein einfacher Test:
def test_multiply():
assert multiply(4, 5) == 20
Beide Funktionen haben eine ähnliche Definition, aber beide machen sehr unterschiedliche Dinge. Kein doppelter Code hier. ;-);
Es kommt auch vor, dass Personen doppelte Tests schreiben, die im Wesentlichen eine Zusicherung pro Testfunktion enthalten. Das ist Wahnsinn und ich habe Leute gesehen, die das getan haben. Das ist schlechte Praxis.
def test_multiply_1_and_3():
"""Assert that a multiplication of 1 and 3 is 3."""
assert multiply(1, 3) == 3
def test_multiply_1_and_7():
"""Assert that a multiplication of 1 and 7 is 7."""
assert multiply(1, 7) == 7
def test_multiply_3_and_4():
"""Assert that a multiplication of 3 and 4 is 12."""
assert multiply(3, 4) == 12
Stellen Sie sich vor, Sie tun dies für mehr als 1000 effektive Codezeilen. Stattdessen testen Sie pro Feature:
def test_multiply_positive():
"""Assert that positive numbers can be multiplied."""
assert multiply(1, 3) == 3
assert multiply(1, 7) == 7
assert multiply(3, 4) == 12
def test_multiply_negative():
"""Assert that negative numbers can be multiplied."""
assert multiply(1, -3) == -3
assert multiply(-1, -7) == 7
assert multiply(-3, 4) == -12
Wenn nun Features hinzugefügt / entfernt werden, muss ich nur noch eine Testfunktion hinzufügen / entfernen.
Sie haben vielleicht bemerkt, dass ich keine for
Schleifen angewendet habe . Dies liegt daran, dass es gut ist, einige Dinge zu wiederholen. Wenn ich Schleifen angewendet hätte, wäre der Code viel kürzer. Wenn eine Zusicherung jedoch fehlschlägt, kann dies die Ausgabe verschleiern, die eine mehrdeutige Nachricht anzeigt. Wenn dies der Fall ist, dann wird Ihre Tests weniger nützlich und Sie werden einen Debugger müssen prüfen , wo die Dinge schief gehen.