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

PyCharm中调用unittest.Mock报错:'module' object is not callable

问题排查与解决方案

错误原因

你遇到的TypeError: 'module' object is not callable,核心问题是调用了模块对象而非可调用的Mock类,结合你的代码来看,有两处关键问题:

  1. 你已经通过from unittest import Mock导入了Mock类,但代码里却错误地使用unittest.Mock()——此时你并未导入unittest模块本身,若环境中unittest被绑定为其他模块对象,调用时就会触发该错误。
  2. 即便你导入了unittest模块,若误将大写的Mock(类)写成小写的mock(模块),也会触发同样错误(unittest.mock是模块,不能直接调用)。

修正后的代码

方式1:使用已导入的Mock类

直接用你已经导入的Mock类赋值,无需加unittest.前缀:

import requests
from unittest import Mock

# 正确赋值:直接使用导入的Mock类
requests = Mock()

def get_holidays():
    r = requests.get("http://localhost/holidays")
    if r.status_code == 200:
        return r.json()
    return None

方式2:导入unittest模块后调用Mock

如果习惯用unittest.Mock()的写法,先导入完整的unittest模块:

import requests
import unittest

# 通过unittest模块调用Mock类
requests = unittest.Mock()

def get_holidays():
    r = requests.get("http://localhost/holidays")
    if r.status_code == 200:
        return r.json()
    return None

补充:完整Mock测试示例

为了让你的测试真正生效,需要给Mock的get方法设置模拟返回值,示例如下:

import requests
from unittest import Mock

# Mock requests模块
requests = Mock()

# 模拟响应对象
mock_response = Mock()
mock_response.status_code = 200
mock_response.json.return_value = {"holidays": ["元旦", "春节"]}
# 将模拟响应绑定到get方法
requests.get.return_value = mock_response

def get_holidays():
    r = requests.get("http://localhost/holidays")
    if r.status_code == 200:
        return r.json()
    return None

# 测试调用
print(get_holidays())  # 输出: {'holidays': ['元旦', '春节']}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:57:41