unit - pytest django
diferencia entre django.test.TestCase vs unittest vs django.utils.unittest.TestCase (1)
El TestCase
de Django mejora unittest.TestCase
con algunas características adicionales:
- Carga automática de los accesorios.
- Envuelve cada prueba en una transacción.
- Crea una instancia de TestClient.
- Afirmaciones específicas de Django para probar cosas como redireccionamiento y errores de forma.
En términos generales, lo más probable es que estés usando una de las subclases TestCase de Django. Por lo general, esto será django.test.TestCase
, que, por eficiencia, envuelve la prueba en una transacción de base de datos y utiliza la reversión para "deshacer" la prueba en la base de datos. Si necesita administrar manualmente las transacciones dentro de su prueba, tendría que usar django.test.TransactionTestCase
, ya que no puede iniciar / deshacer una transacción dentro de una transacción.
Hay algunas advertencias menores sobre el uso de django.test.TestCase
, vea la nota here para obtener más información.
ADEMÁS:
Si solo está buscando una forma de ejecutar sus pruebas más rápido, eche un vistazo a las pruebas en la memoria y (si está usando South), configure SOUTH_TESTS_MIGRATE = False
para decirle a South que use un syncdb
(mucho más rápido) al crear la base de datos de prueba, en lugar de ejecutar migraciones.
Todavía estoy usando Django 1.2.1, y creo que con el Django más nuevo no import unittest
y luego hacemos unittest.TestCase
.
Ilustración
import unittest
class TestThis(unittest.TestCase):
from django.utils.unittest import TestCase
class TestThis(TestCase):
from django.test import TestCase
class TestThis(TestCase):
Según la charla de PyCon2011 , la segunda es un poco más eficiente.
Aquí está el diagram muestra las relaciones:
Entonces django.utils.unittest
y django.test
heredan de unittest
o unittest2
.
No estoy seguro si lo siguiente es correcto o no. Por favor ayuda a editar.
________________________________________________________________
| Name | Django Version | Python Version |
-----------------------------------------------------------------
| unittest | >= 1.0 | >= 2.6 |
-----------------------------------------------------------------
| django.utils.unittest | >= 1.3 | ?? |
-----------------------------------------------------------------
| django.test | >= 1.0 | >= 2.6 |
| - SimpleTestCase >= 1.4 >= 2.7 |
| - LiveServerTestCase >= 1.4 >= 2.7 |
-----------------------------------------------------------------
En términos de eficiencia, ¿cuál de los tres es mejor? Muchos desarrolladores de Django se burlan cuando prueban, por lo que a veces las bases de datos ni siquiera son necesarias. ¿Hay alguna manera de no crear tablas cuando ejecutamos manage.py test myapp.MyClass
? Para la versión anterior (anterior a la 1.3), ¿cuál es mejor?