Python单元测试中如何正确mock被另一函数调用的内部函数?
问题排查与解决
错误原因
这一问题和uuid4无关,属于Python unittest.mock 的典型使用错误,核心问题是patch的目标路径不正确。
Python的mock遵循「在哪里使用,就mock哪里」的规则:
你在generate.py中执行了from utils import generateCode,相当于把utils模块里的generateCode函数引用复制了一份到generate模块的命名空间里。你现在patch的是utils.generateCode,只会修改utils模块自身的函数引用,不会影响generate模块已经导入完成的那份引用,因此测试时调用的还是原函数,会返回随机值。
正确修改方案
只需要把测试代码里patch的路径修改为generate.generateCode,即mockgenerate模块里实际调用的那份函数引用即可,修改后的测试代码如下:
from unittest.mock import patch from generate import create_auth_challenge @patch('generate.generateCode', return_value='123456') def test_create_auth_challenge(self, mock_generateCode): answer = create_auth_challenge() self.assertEqual(answer,'123456')
修改后重新运行测试即可通过。
内容的提问来源于stack exchange,提问作者Shalahuddin Al-Ayyubbi
相关产品推荐
相关产品推荐

