В нашей команде разработчиков используется PEP8 linter, для которого требуется максимальная длина строки 80 символов.
Когда я пишу модульные тесты на питоне, мне нравится иметь описательные имена методов, чтобы описать, что делает каждый тест. Однако это часто приводит меня к превышению предела характера.
Вот пример слишком длинной функции...
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()
Мои параметры:
-
Вы можете просто написать более короткие имена методов!
Я знаю, но я не хочу потерять описательность имен тестов.
-
Вы можете писать многострочные комментарии над каждым тестом вместо использования длинных имен!
Это достойная идея, но тогда я не смогу увидеть имена тестов при запуске тестов внутри своей IDE (PyCharm).
-
Возможно, вы можете продолжить строки с обратной косой чертой (символ продолжения логической строки).
К сожалению, это не вариант в Python, как упоминалось в ответе Дэна.
-
Вы можете прекратить эксперименты.
Это имеет смысл в некоторых отношениях, но приятно поощрять хорошо отформатированный набор тестов.
-
Вы можете увеличить лимит длины строки.
Наша команда любит иметь лимит, потому что помогает сохранить читаемый код на узких дисплеях, поэтому это не лучший вариант.
-
Вы можете удалить
test
с начала ваших методов.Это не вариант. Тест-тестировщик Python нуждается во всех методах тестирования, чтобы начать с
test
, или он не подберет их.Изменить: некоторые тестовые бегуны позволяют указать регулярное выражение при поиске тестовых функций, хотя я бы предпочел не делать этого, потому что это дополнительная настройка для всех, кто работает над проектом. Кроме того, он не отвечает на исходный вопрос.
-
Вы можете разделить EventListener на свой собственный класс и протестировать его отдельно.
Слушатель событий есть в своем классе (и тестируется). Это просто интерфейс, который запускается событиями, происходящими в ClientConnection. Такое предложение, похоже, имеет хорошее намерение, но неверно направлено и не отвечает на исходный вопрос.
-
Вы можете использовать BDD Framework, например Behave. Он предназначен для экспресс-тестов.
Это верно, и я надеюсь использовать их больше в будущем. Хотя мне все же хотелось бы знать, как разделить имена функций по строкам.
В конечном счете...
Есть ли способ в Python разделить объявление длинной функции на несколько строк?
Например...
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()
Или мне придется укусить пулю и сократить ее сам?