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)
Lea sobre objetos simulados aquí
http://en.wikipedia.org/wiki/Mock_object
http://www.mockobjects.com/
Y usa esta lib de Python para burlarse de un usuario
http://python-mock.sourceforge.net/
de lo contrario, puede escribir una clase de usuario simple usted mismo, usar esto como punto de partida
class MockUser(object):
def __call__(self, *args, **kwargs):
return self
def __getattr__(Self, name):
return self
agregar casos específicos, etc.
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.