我是 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)
Run Code Online (Sandbox Code Playgroud)
我想断言 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)
Run Code Online (Sandbox Code Playgroud)
还有那个(还有很多我不记得的事情:D)
def test_create(self):
with mock.patch('django.contrib.auth.models.User') as user_mock:
user_mock.objects = mock.MagicMock() …Run Code Online (Sandbox Code Playgroud) 我还有关于Django单元测试的初学者问题^^
我试图测试一个模型的保存功能被调用,而没有实际调用保存.
这是我想测试的方法:
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
Run Code Online (Sandbox Code Playgroud)
这是测试
@mock.patch('model.models.KangaUser')
@mock.patch('django.contrib.auth.models.User')
def test_create(self, UserMock, KangaUserMock):
# Mocking configuration
# User
UserMock.objects = mock.MagicMock()
UserMock.objects.create_user = mock.MagicMock()
user_return_value = User(id=1)
UserMock.objects.create_user.return_value = user_return_value
# Test
kangauser_manager = …Run Code Online (Sandbox Code Playgroud)