如何使用特定参数模拟一个函数并返回在python单元测试中调用另一个函数的值?

时间:2016-05-27 08:10:54

标签: python unit-testing mocking

我是python单元测试的新手。想要模拟调用其他函数的函数。

这是我想要模拟的功能

def has_groups(self, group_names):
        auth_user_id = AuthUser.get_by_email(self.userEmail).id
        auth_user_groups = AuthUserGroups.get_group_by_user_id(auth_user_id)
        for auth_user_group in auth_user_groups:
            if auth_user_group.group.name in group_names:
                return True
        return False

has_groups只有在得到“管理员”的情况下才会返回“真”。作为参数。

这是我的测试

def my_test(self):
    uid = self.auth_user.get_by_email = Mock(return_value=73)
    groups = AuthUserGroups.get_group_by_user_id = Mock(uid, return_value='Admin')
    self.auth_user.has_groups = Mock(groups, return_value=True)

但它没有正常工作。如果有人帮助我,我将不胜感激

我可以使用补丁装饰器吗?

1 个答案:

答案 0 :(得分:0)

据我了解,has_groups函数是方法。我认为模仿全班或独立功能会更好。在这种情况下,您可以使用AuthUserGroups方法实现模拟has_groups,方法返回值和补丁模块。所以你会有这样的测试:

from unittest import mock

def my_test(self):
    group = mock.MagicMock()
    group.group.name = 'Admin'

    fake_auth_user_groups = mock.MagicMock()
    fake_auth_user_groups.get_group_by_user_id.return_value = [group]

    with mock.patch('your_module.AuthUserGroups', fake_auth_user_groups):
        self.auth_user.has_groups(['Admin'])