Vielleicht liegt das Problem nicht darin, wie man am besten Testdokumente schreibt, sondern wie man die Tests selbst schreibt? Wenn man die Tests so umgestaltet, dass sie sich selbst dokumentieren, kann man viel erreichen, und die Dokumentation wird nicht veraltet sein, wenn sich der Code ändert.
Es gibt ein paar Dinge, die Sie tun können, um die Tests klarer zu machen:
- eindeutige und beschreibende Bezeichnungen der Prüfmethoden (bereits erwähnt)
- der Testkörper sollte klar und prägnant sein (selbstdokumentierend)
- Abstrahieren von komplizierten Einstellungen/Abbau usw. in Methoden
- mehr?
Zum Beispiel, wenn Sie einen Test wie diesen haben:
def test_widget_run_returns_0():
widget = Widget(param1, param2, "another param")
widget.set_option(true)
widget.set_temp_dir("/tmp/widget_tmp")
widget.destination_ip = "10.10.10.99"
return_value = widget.run()
assert return_value == 0
assert widget.response == "My expected response"
assert widget.errors == None
Sie können die Setup-Anweisungen durch einen Methodenaufruf ersetzen:
def test_widget_run_returns_0():
widget = create_basic_widget()
return_value = widget.run()
assert return_value == 0
assert_basic_widget(widget)
def create_basic_widget():
widget = Widget(param1, param2, "another param")
widget.set_option(true)
widget.set_temp_dir("/tmp/widget_tmp")
widget.destination_ip = "10.10.10.99"
return widget
def assert_basic_widget():
assert widget.response == "My expected response"
assert widget.errors == None
Beachten Sie, dass Ihre Testmethode nun aus einer Reihe von Methodenaufrufen mit Namen besteht, die die Absicht offenbaren, eine Art DSL, die speziell für Ihre Tests gilt. Braucht ein solcher Test noch eine Dokumentation?
Außerdem ist zu beachten, dass Ihre Testmethode hauptsächlich auf einer Abstraktionsebene angesiedelt ist. Jemand, der die Testmethode liest, wird sehen, dass der Algorithmus ist:
- Erstellen eines Widgets
- Aufruf der Ausführung des Widgets
- Sicherstellen, dass der Code das tut, was wir erwarten
Ihr Verständnis der Testmethode wird nicht durch die Details der Einrichtung des Widgets getrübt, das eine Abstraktionsebene niedriger ist als die Testmethode.
Die erste Version der Prüfmethode folgt der Inline-Einrichtung Muster. Die zweite Version folgt Methode der Erstellung y Delegierte Einrichtung Muster.
Im Allgemeinen bin ich gegen Kommentare, es sei denn, sie erklären das "Warum" des Codes. Das Lesen von Onkel Bob Martins Sauberer Code hat mich davon überzeugt. Es gibt ein Kapitel über Kommentare, und es gibt ein Kapitel über Tests. Ich empfehle es.
Weitere Informationen über bewährte Verfahren für automatisierte Tests finden Sie unter xUnit-Muster .