0
は(myapp/getters.py
で)少しクラスです:Djangoモデルマネージャのメソッドをモックできますか?ここ
from django.contrib.auth.models import User
class UserGetter:
def get_user(self):
return User.objects.get(username='username')
私は、User.objects.get
への呼び出しをモックMagicMock
を返し、この方法は、私が注入されたものを返すことをテストしたいと思います。
from unittest import TestCase
from django.contrib.auth.models import User, UserManager
from mock import patch, create_autospec
from myapp.getters import UserGetter
class MockTestCase(TestCase):
@patch('myapp.getters.User', autospec=True)
def test(self, user_class):
user = create_autospec(User)
objects = create_autospec(UserManager)
objects.get.return_value = user
user_class.objects.return_value = objects
self.assertEquals(user, UserGetter().get_user())
しかし、私は(python manage.py test myapp.tests.tests_getters
で)このテストを実行するとき、私はなぜ私が注入されたモックを取り戻すません
AssertionError:
<MagicMock name='User.objects().get()' spec='User' id='4354507472'> !=
<MagicMock name='User.objects.get()' id='4360679248'>
を得る:myapp/tests/tests_getters.py
で?どうすればこのテストを正しく書くことができますか?
これだけです。解決策は 'user_class.objects.return_value = objects'を' user_class.objects = objects'に変更することです。 'User'にパッチを当てずに' User.objects'に割り当てるだけでも動作しますが、他のテストを汚染すると思われます。 –