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

如何mock requests.get返回指定HTTP状态码 为无返回值函数编写单元测试

解决方案

可以直接用Python标准库自带的unittest.mock模拟requests.get的返回值,哪怕被测函数没有返回值,也可以通过验证调用逻辑、捕获打印输出来完成单元测试。

首先先修正你示例代码的语法错误:原代码中else 401 == response.status_code需要改为elif 401 == response.status_code,否则会触发语法报错。

测试用例示例

import unittest
from unittest import mock
from foo import getData # 导入你写的getData函数

class TestGetData(unittest.TestCase):
    # 配置捕获标准输出的前置/后置逻辑
    def setUp(self):
        import sys
        from io import StringIO
        self.original_stdout = sys.stdout
        self.output_buffer = StringIO()
        sys.stdout = self.output_buffer
    
    def tearDown(self):
        import sys
        sys.stdout = self.original_stdout
        self.captured_output = self.output_buffer.getvalue()

    @mock.patch("foo.requests.get")
    def test_200_status(self, mock_get):
        # 构造返回200状态码的mock响应
        mock_resp = mock.Mock()
        mock_resp.status_code = 200
        mock_resp.json.return_value = {"data": "test"}
        mock_get.return_value = mock_resp

        # 调用被测函数
        getData()

        # 验证逻辑
        mock_get.assert_called_once() # 验证requests.get确实被调用
        self.assertEqual(self.captured_output.strip(), "success") # 验证输出符合预期

    @mock.patch("foo.requests.get")
    def test_401_status(self, mock_get):
        # 构造返回401状态码的mock响应
        mock_resp = mock.Mock()
        mock_resp.status_code = 401
        mock_resp.json.return_value = {"error": "unauthorized"}
        mock_get.return_value = mock_resp

        getData()

        # 验证逻辑
        mock_get.assert_called_once()
        self.assertEqual(self.captured_output.strip(), "401")

if __name__ == "__main__":
    unittest.main()

注意事项

  • mock.patch的路径需要匹配被测模块内的引用路径:如果getData函数在foo.py内,就写@mock.patch("foo.requests.get"),不要直接patch全局的requests.get
  • 你也可以额外验证mock_get的调用参数是否符合预期,比如是否传入了正确的url和headers,示例:
    mock_get.assert_called_once_with(run_task_status_url, headers=iics_job_header)
    
  • 如果使用pytest测试框架,不需要手动配置setUp/tearDown捕获输出,直接用自带的capsys fixture即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:06:04