Django模仿mod上的save方法

2024-09-30 01:22:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我仍然带着关于Django单元测试的初学者问题

我试着测试一个模型的save函数被调用了,而没有实际调用save。在

下面是我要测试的方法:

from django.db import models
from django.contrib.auth import models as auth_model
from allauth.socialaccount import models as allauth_model

class KangaUserManager(models.Manager):
    def create(self, username, email, password, last_name, first_name, request, registered=True, send_confirmation=True):
        kanga_user = KangaUser()
        kanga_user.user = auth_model.User.objects.create_user(
            username=username,
            email=email,
            password=password,
            first_name=first_name,
            last_name=last_name
        )
        kanga_user.preferred_language = translation.get_language()
        kanga_user.registered = registered
        kanga_user.save()

        return kanga_user

这是测试

^{pr2}$

第一次试验(UserMock.objects.create_用户.assert_called_with)是可以的,但是对于第二种情况,我总是以“AssertionError:False不是true”结束


Tags: namefromimportauthmodelmodelsemailsave
1条回答
网友
1楼 · 发布于 2024-09-30 01:22:13

再搜了几下,我发现了一些有用的东西:

@mock.patch.object(models.KangaUser, 'save')
@mock.patch('django.contrib.auth.models.User')
def test_create(self, user_class_mock, kangauser_save_mock):
    # Mocking configuration
    # User
    user_class_mock.objects = mock.MagicMock()
    user_class_mock.objects.create_user = mock.MagicMock()
    user_class_mock.objects.create_user.return_value = User(id=1)

    # Test
    kangauser_manager = models.KangaUserManager()
    kanga_user = kangauser_manager.create(self.username, self.email, self.password, self.last_name, self.first_name, self.request, self.registered, self.send_confirmation)

    # Checks
    # create_user called with good parameters
    user_class_mock.objects.create_user.assert_called_with(username=self.username, email=self.email, password=self.password, first_name=self.first_name, last_name=self.last_name)
    # KangaUser 
    self.assertTrue(kangauser_save_mock.called)

所以,诀窍是@mock.patch.object! 在

相关问题 更多 >

    热门问题