如何在 python 中模拟 uuid4()?
How to mock uuid4() in python?
A_script.py
from uuid import uuid4
def get_unique_identifier(env, customer_id):
return env + '-' + customer_id + '-' + str(uuid4())[0:8]
test_A_script.py
import unittest
from unittest.mock import patch
import src.A_script as a_script
class MyTestCase(unittest.TestCase):
@patch('uuid.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)
如何制作 uuid4 return 'abcd1234'?
您需要在使用它的模块中模拟该方法。在您的情况下,您在模块 A_script
中使用它,因此您必须使用 'A_script.uuid4
.
调用 patch
您必须修补脚本中导入的 uuid,才能更改
@patch('uuid.uuid4')
至
@patch('src.A_script.uuid4')
# or @patch('src.A_script.uuid4', return_value="abcd1234")
# or @patch('src.A_script.uuid4', new=lambda:"abcd1234")
在最后一种情况下,您根本没有将 mock 作为函数参数传递
A_script.py
from uuid import uuid4
def get_unique_identifier(env, customer_id):
return env + '-' + customer_id + '-' + str(uuid4())[0:8]
test_A_script.py
import unittest
from unittest.mock import patch
import src.A_script as a_script
class MyTestCase(unittest.TestCase):
@patch('uuid.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)
如何制作 uuid4 return 'abcd1234'?
您需要在使用它的模块中模拟该方法。在您的情况下,您在模块 A_script
中使用它,因此您必须使用 'A_script.uuid4
.
patch
您必须修补脚本中导入的 uuid,才能更改
@patch('uuid.uuid4')
至
@patch('src.A_script.uuid4')
# or @patch('src.A_script.uuid4', return_value="abcd1234")
# or @patch('src.A_script.uuid4', new=lambda:"abcd1234")
在最后一种情况下,您根本没有将 mock 作为函数参数传递