Nasz zespół programistów wykorzystuje linter PEP8, który wymaga maksymalnej długości linii 80 znaków .
Kiedy piszę testy jednostkowe w Pythonie, lubię mieć opisowe nazwy metod, aby opisać, co robi każdy test. Jednak często prowadzi to do przekroczenia limitu znaków.
Oto przykład funkcji, która jest zbyt długa ...
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()
Moje opcje:
Możesz po prostu napisać krótsze nazwy metod!
Wiem, ale nie chcę stracić opisowości nazw testów.
Możesz pisać wieloliniowe komentarze nad każdym testem zamiast używać długich nazw!
To przyzwoity pomysł, ale wtedy nie będę mógł zobaczyć nazw testów podczas uruchamiania testów w moim IDE (PyCharm).
Być może możesz kontynuować wiersze za pomocą odwrotnego ukośnika (znak logicznej kontynuacji wiersza).
Niestety nie jest to opcja w Pythonie, jak wspomniano w odpowiedzi Dana.
Możesz przestać lintować swoje testy.
W pewnym sensie ma to sens, ale warto zachęcić do dobrze sformatowanego zestawu testów.
Możesz zwiększyć limit długości linii.
Nasz zespół lubi mieć ten limit, ponieważ pomaga to zachować czytelność kodu na wąskich ekranach, więc nie jest to najlepsza opcja.
Możesz usunąć
testz początku swoich metod.To nie jest opcja. Program uruchamiający testy Pythona potrzebuje na początek wszystkich metod testowych, w
testprzeciwnym razie ich nie pobierze.Edycja: Niektóre programy uruchamiające testy umożliwiają określenie wyrażenia regularnego podczas wyszukiwania funkcji testowych, chociaż wolałbym tego nie robić, ponieważ jest to dodatkowa konfiguracja dla wszystkich pracujących nad projektem.
Możesz oddzielić EventListener do własnej klasy i przetestować ją oddzielnie.
Odbiornik zdarzeń znajduje się we własnej klasie (i jest testowany). To tylko interfejs, który jest wyzwalany przez zdarzenia zachodzące w ClientConnection. Ten rodzaj sugestii wydaje się mieć dobre intencje, ale jest źle skierowany i nie pomaga w odpowiedzi na pierwotne pytanie.
Możesz użyć struktury BDD, takiej jak Behave . Jest przeznaczony do ekspresyjnych testów.
To prawda i mam nadzieję, że w przyszłości wykorzystam ich więcej. Chociaż nadal chciałbym wiedzieć, jak podzielić nazwy funkcji na linie.
Ostatecznie...
Czy w Pythonie istnieje sposób na podzielenie długiej deklaracji funkcji na wiele wierszy ?
Na przykład...
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()
A może sam będę musiał ugryźć kulę i skrócić ją?
func.__doc__