模擬測試庫是Django的一個主題,我似乎無法包裝我的頭。例如,在下面的代碼中,爲什麼我的單元測試中創建的模擬用戶實例不出現在我在'get_user_ids'方法中查詢的用戶對象中?如果我通過調試調用停止了「get_user_ids」方法中的測試並執行「User.objects.all()」,則User查詢集中沒有任何內容,並且測試失敗。我是不是創建三個模擬User實例來查詢UserProxy的靜態方法?如何將Django模擬實例傳遞給類方法?
我正在使用Django 1.6和Postgres 9.3並使用命令「python manage.py test -s apps.profile.tests.model_tests:TestUserProxy」運行測試。
謝謝!
# apps/profile/models.py
from django.contrib.auth.models import User
class UserProxy(User):
class Meta:
proxy = True
@staticmethod
def get_user_ids(usernames):
debug()
user_ids = []
for name in usernames:
try:
u = User.objects.get(username__exact=name)
user_ids.append(u.id)
except ObjectDoesNotExist:
logger.error("We were unable to find '%s' in a list of usernames." % name)
return user_ids
# apps/profile/tests/model_tests.py
from django.test import TestCase
from django.contrib.auth.models import User
from mock import Mock
from apps.profile.models import UserProxy
class TestUserProxy(TestCase):
def test_get_user_ids(self):
u1 = Mock(spec=User)
u1.id = 1
u1.username = 'user1'
u2 = Mock(spec=User)
u2.id = 2
u2.username = 'user2'
u3 = Mock(spec=User)
u3.id = 3
u3.username = 'user3'
usernames = [u1.username, u2.username, u3.username]
expected = [u1.id, u2.id, u3.id]
actual = UserProxy.get_user_ids(usernames)
self.assertEqual(expected, actual)
我再次閱讀您的問題,並將您的意見發送給其他職位。你想創建一個真正的用戶而不是嘲笑:你需要通過'User()'創建真實的對象,就像在https://docs.djangoproject.com/en/1.7/intro/tutorial05/#writing-our-first-測試。 'Mock()'是嘲笑而不是包裝。你應該改變你的問題是明確的...兩個誤解了你想要的... –