unittest unit test run examples example español assertraises python unit-testing testing

run - unittest python español



¿Deberían las pruebas de unidad de Python estar en un módulo separado? (7)

SÍ, use un módulo separado.

Realmente no tiene sentido usar el truco __main__ . Simplemente asuma que tiene varios archivos en su módulo y que ya no funciona, porque no desea ejecutar cada archivo de origen por separado al probar su módulo.

Además, al instalar un módulo, la mayoría de las veces no desea instalar las pruebas . A su usuario final no le interesan las pruebas, solo a los desarrolladores les debe importar.

No realmente. Ponga sus pruebas en tests/ , su documento en doc , y tenga listo un Makefile para una make test . Cualquier otro enfoque son solo soluciones intermedias, solo válidas para pequeños módulos específicos.

¿Hay un consenso sobre el mejor lugar para poner pruebas de unidad de Python?

¿Deberían incluirse las pruebas de if __name__ == ''__main__'' dentro del mismo módulo que la funcionalidad que se está probando (ejecutarse cuando el módulo se ejecuta por sí solo ( if __name__ == ''__main__'' , etc.)), o es mejor incluir las if __name__ == ''__main__'' en módulos diferentes?

Tal vez lo mejor sea una combinación de ambos enfoques, incluidas las pruebas de nivel de módulo dentro de cada módulo y la adición de pruebas de nivel superior que incluyan la funcionalidad de prueba en más de un módulo como módulos separados (¿quizás en un subdirectorio / prueba?).

Supongo que el descubrimiento de pruebas es más sencillo si las pruebas se incluyen en módulos separados, pero hay una carga adicional para el desarrollador si debe recordar actualizar el módulo de prueba adicional si se modifica el módulo bajo prueba.

Me interesaría conocer los pensamientos de la gente sobre la mejor manera de organizar pruebas de unidad.


  1. Dónde debe hacerlo si utiliza una biblioteca que especifique dónde deben vivir las pruebas de unidad,
  2. en los propios módulos para pequeños proyectos, o
  3. en un subdirectorio de tests/ en su paquete para proyectos más grandes.

Es una cuestión de qué funciona mejor para el proyecto que estás creando.

A veces, las bibliotecas que estás usando determinan dónde deben ir las pruebas, como es el caso de Django (donde pones tus pruebas en models.py , tests.py o un subdirectorio de tests/ en tus aplicaciones).

Si no hay restricciones existentes, es una cuestión de preferencia personal. Para un pequeño conjunto de módulos, puede ser más conveniente colocar las pruebas de unidad en los archivos que está creando.

Para algo más que unos pocos módulos, creo las pruebas por separado en un directorio de tests/ paquetes en el paquete. Tener el código de prueba mezclado con la implementación agrega ruido innecesario para cualquiera que lea el código.


Generalmente guardo el código de prueba en un módulo separado, y envío el módulo / paquete y las pruebas en una sola distribución. Si el usuario instala utilizando setup.py , puede ejecutar las pruebas desde el directorio de prueba para asegurarse de que todo funciona en su entorno, pero solo el código del módulo termina en Lib/site-packages .


Personalmente, creo una carpeta de pruebas en mi directorio de origen e intento, más o menos, reflejar mi jerarquía de código fuente principal con equivalentes de prueba de unidad (tener 1 módulo = 1 módulo de prueba de unidad como regla general).

Tenga en cuenta que estoy usando la nose y su filosofía es un poco diferente a la de unittest.


Por lo general, los tengo en una carpeta separada llamada a menudo prueba / . Personalmente, no estoy usando la comprobación if __name__ == ''__main__'', porque uso las pruebas de nos y que maneja la detección de la prueba por sí misma.


Puede haber otras razones además de las pruebas para usar la comprobación if __name__ == ''__main__'' . Mantener las pruebas en otros módulos deja esa opción abierta para usted. Además, si refactoriza la implementación de un módulo y sus pruebas se encuentran en otro módulo que no se editó, SABE que las pruebas no se modificaron cuando las ejecutó contra el código refactorizado.


if __name__ == ''__main__'' , etc. es ideal para pruebas pequeñas.