gpt4 book ai didi

python - Django 单元测试 - 如何断言自定义管理器调用 UserManager.create_user 方法?

转载 作者:行者123 更新时间:2023-11-28 19:20:02 24 4
gpt4 key购买 nike

我是 Python 和 Django 中单元测试和模拟的新手。

这是我的模型(简化版):

from django.db import models
from django.contrib.auth.models import User


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 = User.objects.create_user(
username=username,
email=email,
password=password,
first_name=first_name,
last_name=last_name
)
return kanga_user

class KangaUser(models.Model):
objects = KangaUserManager()

user = models.OneToOneField(User)

我想断言调用了 User.objects.create_user,但实际上并没有调用它。我认为模拟库是可以使用的库,但我什么也没做。

我试过这样的事情:

def test_create(self):
with mock.patch('django.contrib.auth.models.UserManager') as usermanager_mock:
kangauser_manager = KangaUserManager()
kangauser_manager.create(self.username, self.email, self.password, self.last_name, self.first_name, self.request, self.registered, self.send_confirmation)

self.assertTrue(usermanager_mock.create_user.called)

还有那个(还有很多我不记得的事情 :D)

def test_create(self):
with mock.patch('django.contrib.auth.models.User') as user_mock:
user_mock.objects = mock.MagicMock()
user_mock.objects.create_user = mock.MagicMock()

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

self.assertTrue(user_mock.objects.create_user.called)

但我总是看到方法没有被调用

我做错了什么?

(编辑 1:添加了一些导入)

编辑 2:

在进行 Alex martelli 建议的改编时,我遇到了另一个错误,

ValueError: Cannot assign "<MagicMock name='User.objects.create_user()' id='55229392'>": "KangaUser.user" must be a "User" instance.

修改后的代码:

from django.db import models
from django.contrib.auth import models as auth_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
)
return kanga_user

class KangaUser(models.Model):
objects = KangaUserManager()

user = models.OneToOneField(auth_model.User)

最佳答案

使用MagicMock需要返回一个值。

from unittest.mock import MagicMock

thing = KangaUserManager()
thing.create_user = MagicMock(return_value=True)
self.assertTrue(thing.create_user(**user_kwargs))

关于python - Django 单元测试 - 如何断言自定义管理器调用 UserManager.create_user 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27608153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com