如何在 python 中模拟 uuid4() ?

YAS*_*HAV 1 python unit-testing patch mocking python-unittest

A_script.py

from uuid import uuid4

def get_unique_identifier(env, customer_id):
    return env + '-' + customer_id + '-' + str(uuid4())[0:8]
Run Code Online (Sandbox Code Playgroud)

测试_A_脚本.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)
Run Code Online (Sandbox Code Playgroud)

如何让 uuid4 返回“abcd1234”?

use*_*462 8

您必须修补脚本中导入的 uuid,因此请更改

@patch('uuid.uuid4')
Run Code Online (Sandbox Code Playgroud)

@patch('src.A_script.uuid4')
# or @patch('src.A_script.uuid4', return_value="abcd1234")
# or @patch('src.A_script.uuid4', new=lambda:"abcd1234")
Run Code Online (Sandbox Code Playgroud)

在最后一种情况下,您根本不将模拟作为函数参数传递