当前位置: 首页 > news >正文

mock的定义和使用场景

Python自动化中使用mock的示例

在Python自动化测试中,mock 用于模拟对象、函数或方法的行为,以便在隔离的环境中测试代码。以下是一个简单的示例:

假设你有一个 user.py 模块,其中包含一个 get_user_info 函数,用于从数据库获取用户信息:
# user.py
import requests

def get_user_info(user_id):
    url = f"https://example.com/api/users/{user_id}"
    response = requests.get(url)
    if response.status_code == 200:
        return response.json()
    else:
        return None
现在,你要测试 get_user_info 函数,但不想在测试中真的发送网络请求到实际的数据库。这时可以使用 mock 来模拟 requests.get 函数的行为。测试代码如下:
import unittest
from unittest.mock import patch
from user import get_user_info

class TestGetUserInfo(unittest.TestCase):

    @patch('user.requests.get')
    def test_get_user_info_success(self, mock_get):
        # 模拟请求成功的情况
        mock_response = {
            'status_code': 200,
            'json': lambda: {'id': 1, 'name': 'John Doe'}
        }
        mock_get.return_value = mock_response

        result = get_user_info(1)

        self.assertEqual(result, {'id': 1, 'name': 'John Doe'})

    @patch('user.requests.get')
    def test_get_user_info_failure(self, mock_get):
        # 模拟请求失败的情况
        mock_response = {
            'status_code': 404,
            'json': lambda: {}
        }
        mock_get.return_value = mock_response

        result = get_user_info(2)

        self.assertIsNone(result)

if __name__ == '__main__':
    unittest.main()
在上述代码中,使用 @patch('user.requests.get') 装饰器来模拟 user 模块中的 requests.get 函数。在每个测试方法中,通过设置 mock_get.return_value 来模拟不同的响应情况,然后调用 get_user_info 函数进行测试,并使用断言来验证结果是否符合预期。

 

 

相关文章:

  • LORA中 软提示是什么
  • LoRA,DoRA,RSLoRA,LoRA+ 是什么
  • STM32外部中断
  • 复现 MoGe
  • 计算机网络:Socket编程 Tcp协议 第二弹
  • 传智杯-省赛-第二场(B组)题解
  • 限制数据库字段长度的公用写法:length和like和rlike对于限制字段长度的原理与区别
  • 【技海登峰】Kafka漫谈系列(九)SpringBoot整合Kafka多数据源配置
  • BFS最短路径(十六)127. 单词接龙 困难
  • 爬虫案例十四js逆向中国五矿
  • 2.库函数的模拟实现
  • ES怎么通过客户端操作和查询/curl操作指令
  • DeepBI驱动的动态预算与库存联动调整策略
  • 当AI回答问题时,它的“大脑”里在炒什么菜?
  • LoRa无线通讯边缘网关-EG2000-数据上云和远程组网
  • Android电量与流量优化
  • npm、pnpm、cnpm、yarn、npx之间的区别
  • 我的创作纪念日:730天的技术写作之旅
  • 11 | 给 Gin 服务器添加中间件
  • 晨控CK-FR08与汇川H5U系列PLC配置EtherNet/IP通讯连接手册
  • 专访|韩国世宗研究所中国研究中心主任:李在明若上台将推行均衡外交
  • 山东鄄城发生一起交通事故,造成4人死亡、2人受伤
  • 朝着解决问题的正确方向迈进——中美经贸高层会谈牵动世界目光
  • 区域国别学视域下的东亚文化交涉
  • 专访|日本驻华大使金杉宪治:对美、对华外交必须在保持平衡的基础上稳步推进
  • 上海“量子城市”先导应用场景落地曹杨社区,提供哪些服务?