小编CBr*_*ain的帖子

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

我是 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)

python django unit-testing mocking

5
推荐指数
1
解决办法
3178
查看次数

Django - 在模型上模拟save方法

我还有关于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)

python django unit-testing mocking

5
推荐指数
1
解决办法
3913
查看次数

标签 统计

django ×2

mocking ×2

python ×2

unit-testing ×2