2011-03-01 12 views
41

Ahora mismo tengo mis pruebas de unidad de Django viven en mcif/tests.py. Preferiría tener algo más como mcif/tests/foo_test.py, mcif/tests/bar_test.py, etc., pero si organizo mis pruebas de esa manera, Django se desconecta.pruebas unitarias Organizador Django

¿Hay una manera de hacer lo que estoy tratando de hacer o tengo que tener todas mis pruebas en un archivo?

+1

duplicado posible de [la forma de extender las pruebas unitarias Django sobre múltiples archivos?] (Http: // stackoverflow. com/questions/6248510/how-to-spread-django-unit-tests-over-multiple-files) –

Respuesta

106

partir de la versión 1.6 de Django, el mecanismo de descubrimiento de prueba cambió. Ya no es necesario importar todo, desde tests/__init__.py, pero ahora usted tiene que asegurarse de que todos los archivos que contienen las pruebas coinciden con el patrón test*.py.

Por lo tanto, en lugar de tener app/tests/models.py y app/tests/views.py, ahora debe tener app/tests/test_models.py y app/tests/test_views.py.

También puede crear un archivo llamado app/tests/test.py e incluir sus otros archivos de allí. Lo que ocurre es que el corredor buscará los archivos que coincidan con el patrón test*.py y los ejecutará.

+11

+1 para Django 1.6. Además, las importaciones en '__init __. Py' ya no funcionan. – davekr

+2

Para agregar a esto. Crear pruebas/carpeta añaden __init__.py (no hay importaciones) crear pruebas/tests.py (y colocan las importaciones de allí) De esa manera usted puede dejar el prefijo de prueba de cada archivo de prueba. Si eso es preferible – McP

+3

también asegúrese de que tests.py se elimine cuando se usan los paquetes de prueba – f3r3nc

17

Nota: Esto describe el comportamiento antes de Django 1.6. Ver Artur Soler's answer for Django 1.6 and later.

hacer un paquete: myapp/tests/

Dentro del paquete, poner tantos módulos de prueba diferentes como desee. En el __init__.py dentro de tests, importe las pruebas de esos módulos. (O alguna variación sobre este tema.)

editar: Guau, no notó que ya mencionó un paquete tests.

Lo importante es conseguir todo lo disponible en el paquete. Django obtendrá las pruebas del paquete, por lo que deben estar visibles en __init__.py.

[editar: Se agregó una nota acerca de la versión 1.6 de Django]

+5

Ya no es válido desde Django 1.6, consulte mi respuesta a continuación. –

2

En su __init__.py poner algo como:

from foo_test import * 
from bar_test import * 
+0

¿El paquete debe registrarse con settings.py? –

+0

Cuando tenga un archivo llamado '' '__init __. Py''', la carpeta actuará como un módulo. Siempre que el padre de la carpeta esté en '' 'sys.path''' para Python, entonces no se requiere un" registro "adicional en' '' settings.py''', simplemente importe y use. – Evgeny

+0

Configuré un paquete de prueba en mi aplicación y en el '__inti __. Py' importé dos módulos:' tests.py' y 'selenium_tests.py'. Pero, ¿cómo puedo elegir ejecutar solo las pruebas de selenio? Intenté './manage.py test myapp.selenium_tests' o './manage.py test myapp.tests.slenium_tests' pero no los reconoce. –

1

sólo para añadir a Artur Soler 's gran answer ...

También puede utilizar la opción --pattern para especificar cómo los archivos de prueba se nombran.

Por ejemplo, si los archivos de prueba se nombran foo_test.py, bar_test.py y similares, puede utilizar:

$ ./manage.py test --pattern="*_test.py"