¿Cuál es la diferencia entre setUp()
y setUpClass()
en el unittest
marco 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()
.
unittest
no considera que una prueba haya pasado hasta que setearDown
haya completado sin incidentes.setUp
ytearDown
se ejecutan una vez para cadatest
método (es decir, dos veces en total en este ejemplo) perosetUpClass
ytearDownClass
se ejecutan solo una vez cada uno.¿Cuál es la diferencia entre
setUp()
ysetUpClass()
en elunittest
marco de Python ?La principal diferencia (como se señaló en la respuesta de Benjamin Hodgson) es que
setUpClass
se llama solo una vez y es antes de todas las pruebas, mientras quesetUp
se 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
unittest
documentació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
setUp
mé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
setUpClass
mé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 quesetUpClass
rara vez se necesita. Sin embargo, es útil cuando es necesario probar los ejemplos anteriores (o similares).fuente