python 如何在django中模擬用戶和請求



unit-testing mocking (4)

您不需要模擬用戶,因為您可以在測試中創建一個 - 測試完成後數據庫將被銷毀。

要模擬請求,請使用Simon Willison的此片段

我有與請求對像或用戶對象交互的django代碼。 例如:

foo_model_instance = models.get_or_create_foo_from_user(request.user)

如果您要使用django python shell或單元測試進行測試,那麼您會在那里傳遞什麼? 這裡只是一個User對象,但是對模擬請求對象的需求也經常出現。

對於shell或用於單元測試:

  • 你如何模仿用戶?
  • 你如何模擬請求?

Answer #1

你如何模仿用戶?

初始化django.contrib.auth.models.User對象。 User.objects.create_user使這很容易。

你如何模擬請求?

初始化django.http.HttpRequest對象。

當然,根據您的想法,有快捷方式。 如果您只需要一個具有指向user屬性的對象,只需創建一些東西(任何東西)並為其賦予該屬性。



Answer #3

對於請求,我會使用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作為@ozan建議並且可能與工廠男孩的速度(與工廠男孩你可以選擇不保存到DB)





mocking