我是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)
但它没有正常工作。如果有人帮助我,我将不胜感激
我可以使用补丁装饰器吗?
答案 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'])