Django unidad de pruebas con los accesorios de carga para varios problemas aplicaciones dependientes

StackOverflow https://stackoverflow.com/questions/2507294

Pregunta

Ahora estoy haciendo unidad de pruebas para el código ya existente. Me enfrenté al siguiente problema:

Después de ejecutar syncdb para la creación de la base de datos de prueba, Django rellena automáticamente varias mesas como django_content_type o auth_permissions.

Entonces, imagino que necesito para ejecutar una prueba compleja, como comprobar el registro de usuarios, que necesitarán un lof ot tablas de datos y las conexiones entre ellos.

Si voy a tratar de utilizar toda mi base de datos existente para la fabricación de accesorios (que sería más conveniente para mí) - que recibirá el error como aquí . Esto sucede porque, Django ya se ha llenado de tablas como django_content_type.

El siguiente manera posible es utilizar Django dumpdata opción para --exclude ya está lleno con mesas syncdb. Pero esto no funciona bien también, porque si tomo objetos de usuario y grupo de usuarios de mi mesa db y permisos de usuario, que se ha creado automáticamente por syncdb, puedo recibir errores, debido a que las claves primarias, conectándolos ahora están apuntando mal. Esto se describe mejor aquí en parte 'diablos accesorio', pero la solución mostrada no doensn't buen aspecto)

El siguiente esquema posible que veo es a continuación:

  1. estoy pasando mis pruebas; Django crea la base de datos de prueba, hace syncdb y crea todas esas tablas.
  2. En mi configuración de prueba Voy a dejar esta base de datos, la creación de la nueva base de datos en blanco.
  3. Datos de carga de la descarga de la base de datos existente también en la configuración de prueba
¿Fue útil?

Solución

Así es como se resolvió el problema:

Después de la syncdb ha creado la base de datos de prueba, en la sección de configuración de las pruebas que utilizo os.system a Shell acceso desde mi código. A continuación, sólo estoy cargar el volcado de la base de datos, lo que quiero usar para las pruebas.

Así que esto funciona así: rellenos syncdb CONTENTTYPE y algunas otras tablas con datos. A continuación, en Configuración de referencias de ensayos de carga el volcado SQL borra todos los datos creados anteriormente y me da una base de datos agradable.

Puede ser no es la mejor solución, pero funciona =)

Otros consejos

Mi enfoque sería la primera utilización del Sur para hacer migraciones de base de datos fácil (que no ayuda en absoluto, pero es agradable), y luego usar un módulo de métodos de creación del modelo.

Al ejecutar

  $  manage.py test my_proj

Django con el Sur instala con crear la base de datos de prueba y ejecutar todas las migraciones para darle una base de datos de prueba completamente actualizada.

Para las pruebas de escritura, crear primero una pitón módulo de la calle, test_model_factory.py Aquí crear funciones que crean sus objetos.

def mk_user():
   User.objects.create(...)

Luego, en sus pruebas puede importar su módulo test_model_factory, y crear objetos para cada prueba.

  def test_something(self):
     test_user = test_model_factory.mk_user()

     self.assert(test_user ...)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top