Nuestro equipo de desarrollo utiliza un linter PEP8 que requiere una longitud máxima de línea de 80 caracteres .
Cuando escribo pruebas unitarias en Python, me gusta tener nombres de métodos descriptivos para describir lo que hace cada prueba. Sin embargo, esto a menudo me lleva a exceder el límite de caracteres.
Aquí hay un ejemplo de una función que es demasiado larga ...
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()
Mis Opciones:
¡Podrías escribir nombres de métodos más cortos!
Lo sé, pero no quiero perder el carácter descriptivo de los nombres de las pruebas.
¡Puede escribir comentarios de varias líneas encima de cada prueba en lugar de usar nombres largos!
Esta es una idea decente, pero luego no podré ver los nombres de las pruebas cuando las ejecute dentro de mi IDE (PyCharm).
Quizás pueda continuar las líneas con una barra invertida (un carácter de continuación de línea lógica).
Desafortunadamente, esta no es una opción en Python, como se menciona en la respuesta de Dan.
Podría dejar de hacer sus pruebas.
Esto tiene sentido de alguna manera, pero es bueno fomentar un conjunto de pruebas bien formateado.
Podría aumentar el límite de longitud de la línea.
A nuestro equipo le gusta tener el límite porque ayuda a mantener el código legible en pantallas estrechas, por lo que esta no es la mejor opción.
Puede eliminar
testdesde el principio de sus métodos.Esto no es una opción. El ejecutor de pruebas de Python necesita todos los métodos de prueba para empezar
testo no los recogerá.Editar: algunos corredores de prueba le permiten especificar una expresión regular al buscar funciones de prueba, aunque prefiero no hacerlo porque es una configuración adicional para todos los que trabajan en el proyecto.
Puede separar EventListener en su propia clase y probarlo por separado.
El Event Listener está en su propia clase (y está probado). Es solo una interfaz que se activa por eventos que ocurren dentro de ClientConnection. Este tipo de sugerencia parece tener una buena intención, pero está mal dirigida y no ayuda a responder la pregunta original.
Podrías usar un BDD Framework como Behave . Está diseñado para pruebas expresivas.
Esto es cierto y espero utilizar más en el futuro. Aunque todavía me gustaría saber cómo dividir los nombres de las funciones entre líneas.
Por último...
¿Hay alguna forma en Python de dividir una declaración de función larga en varias líneas ?
Por ejemplo...
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()
¿O tendré que morder la bala y acortarlo yo mismo?
func.__doc__