Python单元测试中如何mock uuid4()使其返回固定值'abcd1234'
问题原因
你当前测试不生效的核心原因是没有遵循Python unittest.mock 的patch定位规则:需要mock的是被测试代码实际调用的那个引用,而不是函数定义所在的原模块引用。
你的业务代码A_script.py 用了 from uuid import uuid4 导入,相当于在A_script模块的命名空间里创建了一个独立的uuid4引用,指向原uuid.uuid4函数。你直接patch原uuid.uuid4不会影响A_script里已经导入的这个本地引用。
修改方案
只需要把测试代码里@patch的参数改为你要测试的A_script模块里的uuid4引用即可:
把@patch('uuid.uuid4') 修改为 @patch('src.A_script.uuid4')
修改后的完整测试代码
import unittest from unittest.mock import patch import src.A_script as a_script class MyTestCase(unittest.TestCase): @patch('src.A_script.uuid4') def test_get_unique_identifier(self, mock_uuid4): mock_uuid4.return_value = 'abcd1234' expected = 'test_env-test_cust-abcd1234' unique_identifier = a_script.get_unique_identifier('test_env', 'test_cust') self.assertEqual(expected, unique_identifier)
补充说明
如果业务代码里导入uuid的写法是import uuid,调用的时候用uuid.uuid4(),那你原来的@patch('uuid.uuid4')写法才会生效。
内容的提问来源于stack exchange,提问作者YASH JADHAV
相关产品推荐
相关产品推荐

