You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Mock实战:如何在函数内部Mock run_insert方法?

解决Mock run_insert失败的问题

问题根源

  1. Mock路径错误:Python的unittest.mock.patch需要针对被调用模块中导入的函数引用进行Mock,而非函数的原始定义路径。你的service_register函数在backened/services/service_register.py中导入并调用run_insert,实际执行的是该模块内的run_insert引用,因此必须Mockbackened.services.service_register.run_insert,而非原定义的backened.sql.query_functions.run_insert。
  2. 路径拼写失误:测试代码里的backened.sqlquery_functions.run_insert存在拼写错误,正确路径应为backened.sql.query_functions.run_insert(不过这不是导致断言失败的核心原因)。
  3. Mock参数顺序颠倒:装饰器是从下往上生效的,参数列表中,最后一个装饰器对应的Mock对象要排在最前面。你当前的参数顺序搞反了,导致断言的是错误的Mock对象。

修正后的测试代码

"backened/tests/test_users.py"

from unittest import mock, TestCase
from backened.routes.register import user_register  # 注意原代码中函数名是user_regsiter?需与实际定义保持一致

class TestUserRegistration(TestCase):
    @patch('backened.sql.query_functions.connection') 
    @patch('backened.services.service_register.run_insert', return_value="executed")
    def test_service_reg_return_correct_data(self, mock_insert, mock_sqlalchemy):
        data = {                                                               
            "user_name": "testuser57",
            "password": "123456",
            "email_address": "testuser57@example.com",
            "dob": "2022-06-07 00:00:00",
            "address": "Ahmedabad",
        }
        
        m1 = mock.MagicMock()
        m1.get_json.return_value = data
       
        with mock.patch("backened.routes.register.request", m1):
            response = user_register()  # 确保函数名与实际定义一致,原代码若为user_regsiter需同步修改
            mock_sqlalchemy.assert_called_once()
            mock_insert.assert_called_once() 
            self.assertEqual(response.json, {'Message': 'New user Created'})
            self.assertEqual(response.status_code, 201)  # 状态码单独断言,不要混在JSON断言中

额外提醒

  • 统一函数名拼写:原代码中的user_regsiter少了字母t,建议修改为user_register保持全局一致,避免调用出错。
  • 按需Mock验证函数:如果validate()函数会抛出异常或阻碍测试流程,建议同时Mockbackened.services.service_register.validate,让测试聚焦于run_insert的调用逻辑,不依赖校验环节的实现。

内容的提问来源于stack exchange,提问作者Naveen Pandia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:15:27