Как издеваться над пользователями и запросами в django


У меня есть код django, который взаимодействует с объектами запроса или объектами пользователя. Например что-то вроде:

foo_model_instance = models.get_or_create_foo_from_user(request.user)

Если бы вы собирались протестировать с оболочкой Django python или в unittest, что бы вы там прошли? Здесь просто объект пользователя будет делать, но потребность в объекте mock request также возникает часто.

для оболочки или для unittests:

  • как вы издеваетесь над пользователями?
  • как вы издеваетесь просьбы?
5 57

5 ответов:

для запроса, я бы использовал RequestFactory в комплекте с Django.

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

для пользователей я бы использовал django.ВНО.автор.модели.Пользователь, как предложил @ozan и, возможно, с фабрика мальчик для скорости (с заводским мальчиком вы можете выбрать, чтобы не сохранять в БД)

как вы издеваетесь над пользователями?

инициализации

вы можете либо свернуть свой собственный глумится, как Анураг Uniyal предложил, или вы можете использовать насмешливый рамки.

в ответ на те, кто говорит, что вы можете просто создать обычного пользователя, как и в любом случае в Django... Я хотел бы предложить этот же тест. Модульный тест не должен касаться базы данных, но, создав пользователя, вы изменили базу данных, поэтому мы хотели бы издеваться над ней.

читать о макетных объектах here
http://en.wikipedia.org/wiki/Mock_object
http://www.mockobjects.com/

и использовать этот python lib, чтобы издеваться над пользователем
http://python-mock.sourceforge.net/

еще вы можете написать простой пользовательский класс самостоятельно, используйте это в качестве отправной точки

class MockUser(object):
    def __call__(self, *args, **kwargs):
        return self

    def __getattr__(Self, name):
        return self

добавить специальные случаи и т. д.

вам не нужно издеваться над пользователями, так как вы можете просто создать его в своем тесте - база данных будет уничтожена после завершения теста.

чтобы издеваться над запросами, используйте этот фрагмент от Саймона Willison.