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

Python单元测试中Mock pymysql.connect返回None如何正确配置?

错误原因

你遇到的报错核心是Mock配置和传参不符合原函数的调用逻辑,具体问题有两点:

  • 传参不匹配:你调用does_table_exist时传入的第一个参数是被Mock的pymysql.connect方法,但函数要求的是已经实例化的数据库连接对象,参数类型完全错误。
  • Mock层级错误:你将cursor.return_value设为返回1的execute模拟对象,不符合实际调用逻辑:原函数中with conn.cursor() as cur拿到的cur是游标实例,需要这个实例本身具备execute方法,且该方法返回1。
    之前的配置下cur.execute(sql)无法拿到预期的返回值1,两个条件判断都未触发,所以函数直接返回了初始值None。
正确测试代码
def test_check_table_exists(init):
    # 构造模拟的数据库连接对象
    mock_conn = MagicMock()
    # 构造模拟游标,配置execute方法返回1
    mock_cursor = MagicMock()
    mock_cursor.execute.return_value = 1
    # 适配with conn.cursor()的上下文管理器逻辑
    mock_conn.cursor.return_value.__enter__.return_value = mock_cursor

    # 传入符合要求的模拟连接调用测试函数
    response = init.does_table_exist(mock_conn, 'test')
    assert response == True
补充说明

如果需要测试表不存在的场景,只需要把mock_cursor.execute.return_value改为0即可,断言修改为assert response == False。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:09:03