如何在 Django 中模拟函数?

Ray*_*der 3 python django django-testing python-unittest python-unittest.mock

我希望无论传入什么内容,以下调用which_user都会返回,但它的行为就好像它根本没有被嘲笑一样。self.user

def test_user_can_retrieve_favs_using_impersonation(self):
        with mock.patch('impersonate.helpers.which_user', return_value=self.user):
            user = which_user(self.user2)
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?我which_user像这样导入:from impersonate.helpers import which_user如果有帮助的话。

Pav*_*rev 6

您需要通过函数导入的路径来模拟函数。例如,您在 myapp 的视图中使用您的函数。所以你需要按照以下方式进行:

with mock.patch('myapp.views.which_user', return_value=self.user):
        user = which_user(self.user2)
Run Code Online (Sandbox Code Playgroud)

这是因为它只修补可测试模块中定义的变量,而不修补系统或 venv 中的原始库和包。