模拟 Python 类

模拟 python 类

最近,我必须使用 pytest 为 python 模块编写单元测试。该模块包含一个类,其他类在其构造函数中初始化。

像往常一样,我为此类创建了一个固定装置,以便轻松为每个类方法编写测试。此时,当我尝试模拟构造函数中启动的不同类时,我遇到了一些问题。模拟不起作用,这些类的实例仍在创建中。

经过一些研究并结合我在网上找到的一些不同的解决方案后,我想分享我如何成功模拟课程。

解决方案

这是我尝试模拟的类的示例:

class classa:    def __init__(self):        self.class_b = classb()        self.class_c = classc()        self.count = 0

我们希望在测试期间为此类的每个字段设置一个值。该值可以是 none 或类模拟,但我们不希望启动 classb 和 classc 类。

立即学习“Python免费学习笔记(深入)”;

在我们的例子中,让我们决定 self.class_b 和 self.class_c 应该是模拟:

@pytest.fixturedef mock_class_b():    class_b = mock(spec=classb)    return class_b@pytest.fixturedef mock_class_c():    class_c = mock(spec=classc)    return class_c

因此,这个类别中满足我们目标的固定装置如下所示:

@pytest.fixturedef class_a_mock(mock_class_b, mock_class_c):    with patch.object(target=classa, attribute="__init__", return_value=none) as mock_init:        class_a = classa()        class_a.class_b = mock_class_b        class_a.class_c = mock_class_c        class_b.count = 0        return class_a

重要的部分是如何使用 patch.object 函数,该函数来自 python 中的 unittest.mock 模块。它在测试中用于临时用模拟或其他值替换给定对象的属性。

争论

target=classa:我们要修补其属性的对象(通常是一个类)。attribute=”__init__”: 我们要修补的属性的名称。return_value=none:用一个不执行任何操作的函数替换 __init__ 方法

通过这种方式,我们可以在我们的装置中创建模拟变量。
阅读有关 patch.object 的更多信息

测试技巧

我写这个教程是为了这种情况,无论出于何种原因,我们都无法更改a类的代码。但是,我通常建议如果可能的话修改代码,不是为了改变逻辑,而是为了使其更易于测试。

以下是一些如何修改 a 类以使其更具可测试性的示例:

选项 1: 将 b 类和 c 类的实例作为参数传递。
这样,当我们编写固定装置时,我们可以传递模拟而不是实例。

class classa:    def __init__(self, class_b_instance, class_c_instance):        self.class_b = class_b_instance        self.class_c = class_c_instance        self.count = 0

选项2: 创建一个指示测试模式的布尔变量。
这样我们就可以决定a类的哪些字段在启动时会或不会获取值。

class classa:    def __init__(self, test_mode=false):        if not test_mode:            self.class_b = classb()            self.class_c = classc()        self.count = 0

选项 3: 在单独的方法中进行类启动。
这种方法使我们可以选择避免在测试模块中调用 set_class_variables。

class ClassA:    def __init__(self):        self.class_b = None        self.class_c = None        self.count = None    def set_class_variables(self):        self.class_b = ClassB()        self.class_c = ClassC()        self.count = 0

希望这有帮助! :)

以上就是模拟 Python 类的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1349534.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 12:54:58
下一篇 2025年12月13日 12:55:08

相关推荐

  • 使用 Streamlit 将机器学习模型部署为 Web 应用程序

    介绍 机器学习模型本质上是一组用于进行预测或查找数据模式的规则或机制。简单地说(不用担心过于简单化),在 excel 中使用最小二乘法计算的趋势线也是一个模型。然而,实际应用中使用的模型并不那么简单——它们常常涉及更复杂的方程和算法,而不仅仅是简单的方程。 在这篇文章中,我将首先构建一个非常简单的机…

    好文分享 2025年12月13日
    000
  • 为 Shutil 添加多线程?!

    讨论shutil.copytree添加多线程 ** 我在 python 上写的讨论:https://discuss.python.org/t/add-multithreading-to-shutil-copytree/62078 ** 背景 shutil 是 python 中一个非常有用的模块。你可…

    2025年12月13日
    000
  • Python 元组、集合和字典 || #f #daysofMiva 日

    今天是 #100daysofmiva 的第 5 天 – 请参阅 github 项目。 我深入研究了 python 中的三种基本数据结构:元组、集合和字典。这些结构对于有效组织和访问数据至关重要,每个结构都具有独特的特征和用例。这是我所学到的详细报告,包括流程、技术细节和代码示例。 1.元…

    2025年12月13日
    000
  • 由于源冻结期导致 AWS DMS 表失败

    我们正在将AWS DMS与db2连接以迁移数据。在源中,我们有大约 8 小时的冻结期,因此我们将停止并恢复 DMS 服务。 一旦我们恢复 DMS,大多数表将恢复,但由于某些更改,某些表仍将被锁定,从而导致“表错误”状态。此后我们无法恢复表,唯一的选项是重新加载。 我们无法定义牌桌列表或这些牌桌的发布…

    2025年12月13日
    000
  • Python 技巧:将列表推导式与条件逻辑结合使用

    python 中的列表推导式是一种创建列表并允许条件逻辑根据特定条件过滤或修改元素的简洁方法。 这可以带来更干净、更易读的代码。 示例:过滤和修改列表项 # Original list of numbersnumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]# Use …

    2025年12月13日
    000
  • Python——一种机器语言

    python python 是一种高级解释型编程语言,以其易用性和可读性而闻名。其设计理念强调代码的可读性,使用显着的缩进,帮助开发人员编写清晰简洁的代码。 python 支持多种编程范例,包括过程式编程、面向对象编程和函数式编程。这种多功能性使其适用于广泛的应用,从 web 开发和数据分析到自动化…

    2025年12月13日
    000
  • Python 连接器版本中的新增功能:Microsoft Excel 集成和更新的订阅模型支持

    Devart 是一家为各种数据连接技术和框架提供世界级数据连接解决方​​案的公认供应商,提供了新版本的 Python Connectors 并进行了大量更新。 在此版本中,Devart 推出了新的适用于 Microsoft Excel 的 Python 连接器。它使用户能够对其 Microsoft …

    2025年12月13日
    000
  • 使用 OpenAI Assistants API 创建控制台机器人所需的帮助

    大家好, 我在使用 OpenAI Assistants API 创建控制台机器人时遇到困难,希望得到您的帮助。问题是这样的: 我通过 Playground 创建了一个助手并拥有它的 ID。我现在的目标是创建一个与该助手交互的控制台机器人。助手仅使用指令,不使用任何工具。主要任务是确保机器人根据指令做…

    2025年12月13日
    000
  • CSV – 在 Python 中处理本地和远程文件

    编码员们大家好! 本文介绍了一个开源工具,它能够处理本地和远程 csv 文件、加载和打印信息,然后将列映射到 django 类型。当数据集变大、excel不支持自定义报告或通过数据表进行完整数据操作时,通常需要处理csv文件,并且需要api。 当前的功能列表可以进一步扩展,以将 csv 文件映射到数…

    2025年12月13日
    000
  • Python-Jira 票证管理

    您好,我刚刚发现了 jira lib,我决定对其进行测试,以找到获得最多门票的人。 我的github中的代码:https://github.com/victordalet/jira_python_test 一、安装 你只需要python并安装jira lib。 pip install jira 二 …

    2025年12月13日
    000
  • 如何使用一个 API 创建 AI 聊天机器人来访问多个 LLM

    最初由 liz acosta 发表在 streamlit 博客上 还记得第一次使用人工智能图像生成器有多酷吗?那两千万根手指和噩梦般的吃意大利面的画面不仅仅是有趣,它们在不经意间透露了哎呀!人工智能模型的智能程度与我们一样。和我们一样,他们也很难画手。 人工智能模型很快变得更加复杂,但现在的模型数量…

    2025年12月13日
    000
  • 感觉没有动力

    感觉自己像个菜鸟,放弃了几次。 我第一次开始考虑编码是在我还是个孩子的时候,但我选择成为一名社交蝴蝶,现在我已经 26 岁了,尝试了很多次学习编码 python、JS、React、DB 等等,但是最后,我感到不知所措,放弃了。 现在,正因为如此,我感觉自己像个失败的松手,我想解决这个问题。关于如何做…

    2025年12月13日
    000
  • 掌握 Django:从头开始构建安全的用户身份验证 API

    “## 第四天#100daysofMiva 编码挑战赛已经进行四天了。 ??? ? 深入了解 django:从头开始构建安全的用户身份验证 api! 您准备好将您的 Django 技能提升到新水平了吗? ? 在本教程中,我将指导您使用 Django 创建强大的用户身份验证 API。无论您…

    2025年12月13日 好文分享
    000
  • Python 教程 – 简介

    python 是目前最流行的编程语言之一,尤其是随着人工智能技术的兴起。 python 是一种多用途编程语言,用于开发 web 应用程序、后端服务、数据科学和机器学习等许多东西。 设置 这些是使用 python 编码的准备工作: 下载python然后安装。您可以使用任何文本编辑器来编写 python…

    2025年12月13日
    000
  • 每周挑战

    穆罕默德·s·安瓦尔 (mohammad s. anwar) 每周都会发出“每周挑战”,为我们所有人提供了为两周任务提出解决方案的机会。我的解决方案首先用python编写,然后转换为perl。这对我们所有人来说都是练习编码的好方法。 挑战,我的解决方案 任务 1:唯一编号 任务 给你一个整数数组@i…

    2025年12月13日
    000
  • 如何使用 Python 自动下载图像:综合指南

    在当今的数字时代,以编程方式管理和处理图像可以为您节省大量的时间和精力。如果您希望自动化从网络下载图像的过程,那么您来对地方了。在本文中,我们将深入研究一个使用 pexels api(高质量库存照片的流行来源)来完成此操作的 python 脚本。 概述此处提供的 python 脚本允许您根据查询在 …

    2025年12月13日
    000
  • 硒 python 和 docker

    嗨,我展示了如何在 docker 容器中使用 selenium (或 undetected_chromedriver)。 我——dockerfile 我正在使用 docker python 图像并添加 chromdriver 和 chromium 来浏览网站。 第一步是创建requirements.…

    2025年12月13日
    000
  • 矢量视觉:改变您的本地图像搜索

    Vector Vision 是一款桌面应用程序,旨在简化用户搜索和管理本地图像集合的方式,利用技术提供直观、高效的体验,而无需互联网连接。该应用程序采用Python和Qt5作为其核心功能,而ChromaDB则增强了其图像搜索功能。 核心特性和技术见解 Vector Vision 的主要功能之一是其多…

    2025年12月13日
    000
  • ROBOFLOW – 使用 python 进行训练和测试

    roboflow 是一个用于注释图像以用于对象检测 ai 的平台。 我将这个平台用于 c2smr c2smr.fr,我的海上救援计算机视觉协会。 在本文中,我将向您展示如何使用这个平台并使用 python 训练您的模型。 您可以在我的github上找到更多示例代码:https://github.co…

    2025年12月13日
    000
  • 数据工程终极指南

    数据工程是设计和构建大规模收集、存储和分析数据的系统的实践。这是一个广泛的领域,几乎在每个行业都有应用。本文旨在提供有关如何成为一名数据工程师的分步指南。大多数数据工程师都拥有计算机科学或相关领域的学士学位背景,教授云计算、编码技能和数据库设计等基础知识。要成为一名数据工程师,首先应该专注于培养数据…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信