PyCharm中调用unittest.Mock报错:'module' object is not callable
问题排查与解决方案
错误原因
你遇到的TypeError: 'module' object is not callable,核心问题是调用了模块对象而非可调用的Mock类,结合你的代码来看,有两处关键问题:
- 你已经通过
from unittest import Mock导入了Mock类,但代码里却错误地使用unittest.Mock()——此时你并未导入unittest模块本身,若环境中unittest被绑定为其他模块对象,调用时就会触发该错误。 - 即便你导入了
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
相关产品推荐
相关产品推荐

