¿Cuál es la diferencia entre setUp()y setUpClass()en el unittestmarco de Python ? ¿Por qué la configuración se manejaría en un método sobre el otro?
Quiero comprender qué parte de la configuración se realiza en las funciones setUp()y setUpClass(), así como con tearDown()y tearDownClass().

unittestno considera que una prueba haya pasado hasta que setearDownhaya completado sin incidentes.setUpytearDownse ejecutan una vez para cadatestmétodo (es decir, dos veces en total en este ejemplo) perosetUpClassytearDownClassse ejecutan solo una vez cada uno.¿Cuál es la diferencia entre
setUp()ysetUpClass()en elunittestmarco de Python ?La principal diferencia (como se señaló en la respuesta de Benjamin Hodgson) es que
setUpClassse llama solo una vez y es antes de todas las pruebas, mientras quesetUpse llama inmediatamente antes de todas y cada una de las pruebas. (NB: Lo mismo se aplica a los métodos equivalentes en otros marcos de prueba de xUnit, no solo a los de Pythonunittest).De la
unittestdocumentación :y:
¿Por qué la configuración se manejaría en un método sobre el otro?
Esta parte de la pregunta aún no ha sido respondida. Según mi comentario en respuesta a la respuesta de Gearon, el
setUpmétodo está destinado a elementos del accesorio que son comunes a todas las pruebas (para evitar duplicar ese código en cada prueba). Encuentro que esto a menudo es útil ya que eliminar la duplicación (generalmente) mejora la legibilidad y reduce la carga de mantenimiento.El
setUpClassmétodo es para elementos costosos que preferiría tener que hacer una sola vez, como abrir una conexión de base de datos, abrir un archivo temporal en el sistema de archivos, cargar una biblioteca compartida para probar, etc. Hacer tales cosas antes de cada prueba ralentizaría el conjunto de pruebas demasiado, por lo que solo lo hacemos una vez antes de todas las pruebas. Esta es una ligera degradación en la independencia de las pruebas pero una optimización necesaria en algunas situaciones. Podría decirse que uno no debería hacer tales cosas en pruebas unitarias, ya que generalmente es posible burlarse de la base de datos / sistema de archivos / biblioteca / lo que sea sin usar la cosa real. Como tal, encuentro quesetUpClassrara vez se necesita. Sin embargo, es útil cuando es necesario probar los ejemplos anteriores (o similares).fuente