Unser Entwicklungsteam verwendet einen PEP8-Linter, der eine maximale Zeilenlänge von 80 Zeichen erfordert .
Wenn ich Unit-Tests in Python schreibe, möchte ich beschreibende Methodennamen haben, um zu beschreiben, was jeder Test tut. Dies führt jedoch oft dazu, dass ich die Zeichenbeschränkung überschreite.
Hier ist ein Beispiel für eine Funktion, die zu lang ist ...
class ClientConnectionTest(unittest.TestCase):
def test_that_client_event_listener_receives_connection_refused_error_without_server(self):
self.given_server_is_offline()
self.given_client_connection()
self.when_client_connection_starts()
self.then_client_receives_connection_refused_error()
Meine Optionen:
Sie könnten einfach kürzere Methodennamen schreiben!
Ich weiß, aber ich möchte die Beschreiblichkeit der Testnamen nicht verlieren.
Sie können über jeden Test mehrzeilige Kommentare schreiben, anstatt lange Namen zu verwenden!
Dies ist eine anständige Idee, aber dann kann ich die Testnamen nicht sehen, wenn ich die Tests in meiner IDE (PyCharm) ausführe.
Vielleicht können Sie die Zeilen mit einem Backslash (einem logischen Zeilenfortsetzungszeichen) fortsetzen.
Leider ist dies in Python keine Option, wie in Dans Antwort erwähnt.
Sie könnten aufhören, Ihre Tests zu färben.
Dies ist in gewisser Hinsicht sinnvoll, aber es ist schön, eine gut formatierte Testsuite zu fördern.
Sie können die Zeilenlängenbeschränkung erhöhen.
Unser Team mag das Limit, weil es hilft, den Code auf schmalen Displays lesbar zu halten, daher ist dies nicht die beste Option.
Sie können
testvom Anfang Ihrer Methoden entfernen .Dies ist keine Option. Der Testläufer von Python benötigt zunächst alle Testmethoden, sonst werden
testsie nicht erfasst.Bearbeiten: Bei einigen Testläufern können Sie bei der Suche nach Testfunktionen einen regulären Ausdruck angeben, obwohl ich dies lieber nicht tun möchte, da dies ein zusätzliches Setup für alle ist, die an dem Projekt arbeiten.
Sie können den EventListener in eine eigene Klasse aufteilen und separat testen.
Der Event Listener ist in einer eigenen Klasse (und wird getestet). Es ist nur eine Schnittstelle, die durch Ereignisse in ClientConnection ausgelöst wird. Diese Art von Vorschlag scheint eine gute Absicht zu haben, ist jedoch fehlgeleitet und hilft nicht bei der Beantwortung der ursprünglichen Frage.
Sie können ein BDD-Framework wie Behave verwenden . Es ist für Ausdruckstests konzipiert.
Dies ist wahr, und ich hoffe, dass ich in Zukunft mehr davon verwenden kann. Obwohl ich immer noch gerne wissen möchte, wie man Funktionsnamen über Zeilen verteilt.
Letzten Endes...
Gibt es in Python eine Möglichkeit, eine lange Funktionsdeklaration auf mehrere Zeilen aufzuteilen ?
Zum Beispiel...
def test_that_client_event_listener_receives_
connection_refused_error_without_server(self):
self.given_server_is_offline()
self.given_client_connection()
self.when_client_connection_starts()
self.then_client_receives_connection_refused_error()
Oder muss ich die Kugel beißen und selbst kürzen?
func.__doc__