vistas test proyectos property mock ejemplos data create python django unit-testing mocking

test - python mock property



Cómo simular usuarios y solicitudes en django (5)

¿Cómo te burlas de los usuarios?

Inicialice un objeto django.contrib.auth.models.User . User.objects.create_user hace fácil.

¿Cómo te burlas de las solicitudes?

Inicialice un objeto django.http.HttpRequest .

Por supuesto, hay atajos dependiendo de lo que quieras hacer. Si solo necesitas un objeto con un atributo de user que apunta a un usuario, simplemente crea algo (cualquier cosa) y dale ese atributo.

Tengo el código django que interactúa con objetos de solicitud u objetos de usuario. Por ejemplo, algo como:

foo_model_instance = models.get_or_create_foo_from_user(request.user)

Si fueras a probar con el shell django python o en una prueba unitaria, ¿qué pasarías allí? Aquí simplemente hará un objeto User, pero la necesidad de un objeto de solicitud falso también aparece con frecuencia.

Para el shell o para unittests:

  • ¿Cómo te burlas de los usuarios?
  • ¿Cómo te burlas de las solicitudes?

A pedido, usaría RequestFactory incluido con Django.

from django.test.client import RequestFactory rf = RequestFactory() get_request = rf.get(''/hello/'') post_request = rf.post(''/submit/'', {''foo'': ''bar''})

para los usuarios, usaría django.contrib.auth.models.User como lo sugirió @ozan y tal vez con el chico de fábrica para la velocidad (con el chico de la fábrica puede optar por no guardar en DB)



No es necesario que se burle de los usuarios, ya que puede crear uno dentro de su prueba: la base de datos se destruye una vez que finaliza la prueba.

Para simular las solicitudes, utiliza este fragmento de Simon Willison.


Puedes rodar tus propios burlas, como ha sugerido Anurag Uniyal, o puedes usar un marco de burla.

En respuesta a los que dicen que puedes simplemente crear un usuario ordinario como lo harías de todos modos en Django ... Sugeriría que esto derrote el punto de la prueba unitaria. Una prueba de unidad no debe tocar la base de datos, pero al crear un usuario, ha cambiado la base de datos, por lo que nos gustaría simular una.