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

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 函数进行测试,并使用断言来验证结果是否符合预期。

 

 


http://www.kler.cn/a/582479.html

相关文章:

  • 程序代码篇---STM舵机控制
  • uniapp+微信小程序+最简单局部下拉刷新实现
  • 【Linux系统】进程优先级:进程间的权力游戏
  • Android : Camera之CHI API
  • 学习MDA规范_5.统一建模语言(UML)
  • Chrome 浏览器 133 版本新特性
  • 本地Git仓库搭建(DevStar)与Git基本命令
  • 20 | 如何添加单元测试用例
  • 含k个3的数(信息学奥赛一本通-1090)
  • 深度学习之目标检测/对象检测
  • Scala编程_实现Rational的基本操作
  • rust语言闭包trait类型编译器推导总结
  • Matlab深度学习ResNet、迁移学习多标签图像分类及超分辨率处理Grad CAM可视化分析COCO、手写数字数据集...
  • 大模型在甲状腺肿瘤预测及治疗方案制定中的应用研究
  • 探索DEHP暴露对小鼠心脏发育的影响:AbMole助力揭示线粒体功能障碍的奥秘
  • 每周一篇——PLG(Promtail+Loki+Grafana)轻量日志方案
  • [JAVASE] 注解
  • 大白话 Vue 中的keep - alive组件,它的作用是什么?在什么场景下使用?
  • APK文件结构与逆向工具链深度解析
  • 【BUG分析】微服务无法读取Nacos中的共享配置