我有一些django代码可以与请求对象或用户对象交互,例如:
foo_model_instance = models.get_or_create_foo_from_user(request.user)
如果你打算用djangopython shell或者单元测试来测试,你会在那里传递什么呢?这里只需要一个User对象就可以了,但是经常需要一个mock request对象。对于 shell 或单元测试:
ndh0cuux1#
对于请求,我会使用Django附带的RequestFactory。
from django.test.client import RequestFactory rf = RequestFactory() get_request = rf.get('/hello/') post_request = rf.post('/submit/', {'foo': 'bar'})
对于用户,我会使用django.contrib.auth.models.User作为@奥赞建议,也许与factory boy的速度(与工厂男孩你可以选择不保存到DB)
w51jfk4q2#
如何模拟用户?初始化一个django.contrib.auth.models.User对象。User.objects.create_user使这变得很容易。你怎么能嘲笑别人的请求呢?初始化django.http.HttpRequest对象。当然,根据您想要做什么,也有一些快捷方式,如果您只需要一个具有user属性的对象,该属性指向一个用户,那么只需创建一些东西(任何东西)并赋予它该属性。
django.contrib.auth.models.User
User.objects.create_user
django.http.HttpRequest
user
vmjh9lq93#
您可以像AnuragUniyal建议的那样创建自己的模拟,也可以使用模拟框架。对于那些说你可以像在Django中一样创建一个普通用户的人,我认为这破坏了单元测试的意义。单元测试不应该触及数据库,但是通过创建一个用户,你已经改变了数据库,因此我们想要模拟一个。
hmmo2u0o4#
您不需要模拟用户,因为您可以在测试中创建一个用户-测试完成后数据库将被销毁。要模拟请求,请使用Simon Willison的this snippet。
cbeh67ev5#
在此处阅读模拟对象http://en.wikipedia.org/wiki/Mock_objecthttp://www.mockobjects.com/并使用这个Python库来模拟用户http://python-mock.sourceforge.net/否则,您可以自己编写一个简单的User类,将其用作起点
class MockUser(object): def __call__(self, *args, **kwargs): return self def __getattr__(Self, name): return self
增加具体案例等
qlvxas9a6#
已经有很多很好的一般性答案了。下面是一个简单的模拟用户,用于涉及admin表单的测试:
class MockUser: is_active = True is_staff = True def has_perm(self, *args): return True from django.test.client import RequestFactory request = RequestFactory().get("/some/url") request.user = MockUser()
6条答案
按热度按时间ndh0cuux1#
对于请求,我会使用Django附带的RequestFactory。
对于用户,我会使用django.contrib.auth.models.User作为@奥赞建议,也许与factory boy的速度(与工厂男孩你可以选择不保存到DB)
w51jfk4q2#
如何模拟用户?
初始化一个
django.contrib.auth.models.User
对象。User.objects.create_user
使这变得很容易。你怎么能嘲笑别人的请求呢?
初始化
django.http.HttpRequest
对象。当然,根据您想要做什么,也有一些快捷方式,如果您只需要一个具有
user
属性的对象,该属性指向一个用户,那么只需创建一些东西(任何东西)并赋予它该属性。vmjh9lq93#
您可以像AnuragUniyal建议的那样创建自己的模拟,也可以使用模拟框架。
对于那些说你可以像在Django中一样创建一个普通用户的人,我认为这破坏了单元测试的意义。单元测试不应该触及数据库,但是通过创建一个用户,你已经改变了数据库,因此我们想要模拟一个。
hmmo2u0o4#
您不需要模拟用户,因为您可以在测试中创建一个用户-测试完成后数据库将被销毁。
要模拟请求,请使用Simon Willison的this snippet。
cbeh67ev5#
在此处阅读模拟对象
http://en.wikipedia.org/wiki/Mock_object
http://www.mockobjects.com/
并使用这个Python库来模拟用户
http://python-mock.sourceforge.net/
否则,您可以自己编写一个简单的User类,将其用作起点
增加具体案例等
qlvxas9a6#
已经有很多很好的一般性答案了。下面是一个简单的模拟用户,用于涉及admin表单的测试: