El comportamiento ha cambiado en Django 1.6, por lo que ya no es necesario crear un paquete. Solo nombra tus archivos test*.py
.
De la documentación de Django 1.7
Cuando ejecuta sus pruebas, el comportamiento predeterminado de la utilidad de prueba es encontrar todos los casos de prueba (es decir, subclases de unittest.TestCase) en cualquier archivo cuyo nombre comience con prueba, construya automáticamente un conjunto de pruebas a partir de esos casos de prueba, y ejecuta esa suite.
De la documentación de Django 1.6 ,
El descubrimiento de prueba se basa en el descubrimiento de prueba incorporado del módulo unittest. De manera predeterminada, esto detectará pruebas en cualquier archivo llamado "prueba * .py" en el directorio de trabajo actual.
Comportamiento anterior, de la documentación de Django 1.5 :
Cuando ejecuta sus pruebas, el comportamiento predeterminado de la utilidad de prueba es encontrar todos los casos de prueba (es decir, subclases de unittest.TestCase) en models.py y tests.py, construye automáticamente un conjunto de pruebas a partir de esos casos de prueba, y ejecuta esa suite.
Hay una segunda forma de definir el conjunto de pruebas para un módulo: si define una función llamada suite () en models.py o tests.py, el corredor de pruebas de Django usará esa función para construir el conjunto de pruebas para ese módulo. Esto sigue la organización sugerida para las pruebas unitarias. Consulte la documentación de Python para obtener más detalles sobre cómo construir un conjunto de pruebas complejo.
test*.py
archivos en una carpeta llamadatests
para mantener la carpeta limpia; esto es posible, pero debe ejecutar./manage.py test app.tests
y todas las importaciones relativas deben subir de nivel (sefrom .models
conviertefrom ..models
).Tenga en cuenta que este enfoque ya no es válido desde Django 1.6, consulte esta publicación .
Puede crear una
tests
carpeta con___init___.py
dentro (para que se convierta en un paquete). Luego agrega sus archivos .py de prueba dividida allí e importa todos ellos___init___.py
.Es decir: sustituya el
test.py
archivo con un módulo que se vea y actúe como el archivo:Crear un
tests
directorio debajo de la aplicación en cuestiónImporte los submódulos a
app\tests\__init__.py
:Ahora puede usar ./manage.py como si todos estuvieran en un solo archivo:
fuente
python manage.py test myapp
, de hecho, esta respuesta funciona bien. (solo lo intenté)La respuesta según lo declarado por Tomasz es correcta. Sin embargo, puede volverse tedioso asegurarse de que las importaciones
__init__.py
coincidan con la estructura de su archivo.Para detectar automáticamente todas las pruebas en la carpeta , puede agregar esto en
__init__.py
:Esto le permitirá ejecutar,
./manage.py test appname
pero no manejará la ejecución de pruebas específicas. Para hacer eso, puede usar este código (también en__init__.py
):Ahora puede ejecutar todas sus pruebas a través de
manage.py test app
o específicas a través demanage.py test app.TestApples
fuente
__init__.py
sys.modules[packagename]
. Una solución rápida es paradel
cualquiera que cause problemas después de lo anterior. (O podría cambiar el nombre de sus carpetas;))python manage.py test appName
), el segundo bit de código arrojaría un error que indicaba que__path__
no estaba disponible. Lo evité envolviendo el segundo fragmento en unif '__path__' in locals():
cheque, lo que funcionó. ¡Gracias por la respuesta!Simplemente haga su estructura de directorio de esta manera:
Y
python manage.py test myapp
funcionará como se espera.fuente
http://docs.python.org/library/unittest.html#organizing-tests habla sobre la división de los archivos en módulos, y la sección justo encima tiene un ejemplo.
fuente
No es necesario codificar nada en init. Simplemente cree un subdirectorio en su aplicación. El único requisito es no llamarlo pruebas * Por ejemplo
fuente
Con Django 2.2, una solución simple y bastante buena podría ser crear una
test
carpeta dentro de una aplicación, y puede poner sustest_...py
archivos relacionados , simplemente agregarlos__init__.py
a latest
carpeta.fuente
Si tiene una configuración más complicada, o no desea usar
from ... import *
sentencias de tipo, puede definir una función llamadasuite
en su tests.py (o tests / __ init__.py), que devuelve una instancia deunittest.TestSuite
.fuente
Yo creo que
./manage.py test
simplemente ejecuta el truco de todas las pruebas (en django> = 1.7).Si sus pruebas de organización son sobre agrupación y selección de cerezas y es fanático de
nose
usar django nose :Si conoce nose, entonces sabe cómo "comodín" mucho mejor en todos sus archivos.
PD
Es solo una mejor práctica. Espero que ayude. La respuesta se tomó prestada aquí: ejecutar un caso de prueba específico en Django cuando su aplicación tiene un directorio de pruebas
fuente
Tengo dos archivos Uno es
tests.py
y otro estest_api.py
. Puedo ejecutar estos individualmente como a continuación.Consulte la respuesta de @ osa sobre la convención de nomenclatura de archivos.
fuente