为什么要使用 pytest 工厂作为固定装置而不是工厂函数?

2024-03-15

In the py.test 文档 https://docs.pytest.org/en/latest/fixture.html#factories-as-fixtures它描述了将工厂方法声明为固定装置,如下所示:

@pytest.fixture
def make_foo():
    def __make_foo(name):
        foo = Foo()
        foo.name = name
        return foo
    return __make_foo

与仅定义 make_foo 函数并使用它相比,这样做有什么好处/权衡?我不明白为什么它是一个固定装置。


实际上,最重要的优点是能够使用其他固定装置,并使 pytest 的依赖注入为您工作。 另一个优点是允许您将参数传递给工厂,这些参数在普通夹具中必须是静态的。

看这个例子:

@pytest.fixture
def mocked_server():
    with mock.patch('something'):
        yield MyServer()


@pytest.fixture
def connected_client(mocked_server):
    client = Client()
    client.connect_to(mocked_server, local_port=123)  # local_port must be static
    return client

您现在可以编写一个测试来获取connected_client,但您无法更改端口。 如果您需要对多个客户端进行测试怎么办?你也不能。

如果你现在写:

@pytest.fixture
def connect_client(mocked_server):
    def __connect(local_port):
        client = Client()
        client.connect_to(mocked_server, local_port)
        return client
    return __connect

你可以编写测试来接收connect_client工厂,并调用它以在任何端口获取初始化的客户端,并且您想要多少次!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么要使用 pytest 工厂作为固定装置而不是工厂函数? 的相关文章

  • 将 pandas 数据框中的列减去其第一个值

    我需要将 pandas 数据帧的一列中的所有元素减去其第一个值 在这段代码中 pandas 抱怨 self inferred type 我猜这是循环引用 df Time df Time df Time 0 在这段代码中 pandas 抱怨为
  • 如何屏蔽 PyTorch 权重参数中的权重?

    我正在尝试在 PyTorch 中屏蔽 强制为零 特定权重值 我试图掩盖的权重是这样定义的def init class LSTM MASK nn Module def init self options inp dim super LSTM
  • 在 Python 中使用 XPath 和 LXML

    我有一个 python 脚本 用于解析 XML 并将某些感兴趣的元素导出到 csv 文件中 我现在尝试更改脚本以允许根据条件过滤 XML 文件 等效的 XPath 查询将是 DC Events Confirmation contains T
  • 使用 Django 的 post_save() 信号

    我有两张桌子 class Advertisement models Model created at models DateTimeField auto now add True author email models EmailField
  • 在 Python 中使用 sec 函数的反函数

    我正在创建一个程序 用于计算从一定高度范围和设定初始速度发射射弹的最佳角度 在我需要使用的最终方程中 存在一个反 sec 函数 它导致了一些麻烦 我已经导入了数学并尝试使用 asec 无论如何 但是数学似乎无法计算反秒函数 我也明白 sec
  • NLTK、搭配问题:需要解包的值太多(预期为 2)

    我尝试使用 NLTK 检索搭配 但出现错误 我使用内置的古腾堡语料库 I wrote alice nltk corpus gutenberg fileids 7 al nltk corpus gutenberg words alice al
  • 在 python-docx 中搜索和替换

    我有一个包含以下字符串的文档 模板 你好 我的名字是鲍勃 鲍勃是一个很好的名字 我想使用 python docx 打开此文档并使用 查找和替换 方法 如果存在 来更改每个字符串 Bob gt Mark 最后 我想生成一个新文档 其中包含字符
  • 无法包含外部 pandas 文档 Pycharm v--2018.1.2

    我无法包含外部 pandas 文档Pycharm v 2018 1 2 例如 numpy gt http docs scipy org doc numpy reference generated module name element na
  • python ttk treeview:如何选择并设置焦点在一行上?

    我有一个 ttk Treeview 小部件 其中包含一些数据行 如何设置焦点并选择 突出显示 指定项目 tree focus set 什么也没做 tree selection set 0 抱怨 尽管小部件明显填充了超过零个项目 但未找到项目
  • Python:随时接受用户输入

    我正在创建一个可以做很多事情的单元 其中之一是计算机器的周期 虽然我将把它转移到梯形逻辑 CoDeSys 但我首先将我的想法放入 Python 中 我将进行计数 只需一个简单的操作 counter 1 print counter 跟踪我处于
  • Python unicode 字符代码?

    有没有办法将 Unicode 字符 插入 Python 3 中的字符串 例如 gt gt gt import unicode gt gt gt string This is a full block s unicode charcode U
  • 我可以使用 dask 创建 multivariate_normal 矩阵吗?

    有点相关这个帖子 https stackoverflow com questions 52337612 random multivariate normal on a dask array 我正在尝试复制multivariate norma
  • Python int 太大,无法放入 SQLite

    我收到错误 OverflowError Python int 太大 无法转换为 SQLite INTEGER 来自以下代码块 该文件约25GB 因此必须分部分读取 length 6128765 Works on partitions of
  • 在 pip.conf 中指定多个可信主机

    这是我尝试在我的中设置的 etc pip conf global trusted host pypi org files pythonhosted org 但是 它无法正常工作 参考 https pip pypa io en stable
  • 在pycharm中调试python代码

    这个问题类似于this https stackoverflow com questions 10240018 how to use pycharm to debug python script一 我正在尝试调试pyethapp https
  • Python 矩阵每一行的总和

    lista 1 2 3 4 5 6 7 8 9 print lista def filas lista res for elemento in lista x sum lista elemento res append x print re
  • 是否可以写一个负的python类型注释

    这可能听起来不合理 但现在我需要否定类型注释 我的意思是这样的 an int Not Iterable a string Iterable 这是因为我为一个函数编写了一个重载 而 mypy 不理解我 我的功能看起来像这样 overload
  • Python模块单元测试的最佳文件结构组织?

    遗憾的是 我发现有太多方法可以在 Python 中保存单元测试 而且它们通常没有很好的文档记录 我正在寻找一种 终极 结构 它可以满足以下大部分要求 be discoverable by test frameworks including
  • CSV 在列中查找最大值并附加新数据

    大约两个小时前 我问了一个关于从网站读取和写入数据的问题 从那时起 我花了最后两个小时试图找到一种方法来从输出的 A 列读取最大日期值 将该值与刷新的网站数据进行比较 并将任何新数据附加到 csv 文件而不覆盖旧的或创建重复项 目前 100
  • PyQt 中的线程和信号问题

    我在 PyQt 中的线程之间进行通信时遇到一些问题 我使用信号在两个线程 发送者和监听者 之间进行通信 发送者发送消息 期望被监听者接收 但是 没有收到任何消息 谁能建议可能出了什么问题 我确信这一定很简单 但我已经环顾了几个小时但没有发现

随机推荐

  • MySQL 8.0 升级后特定查询性能不佳

    编辑 我在 Python 中看到与 PHP 相同的行为 好像和MySQL有关 我们正在尝试从 MySQL 5 7 升级到 8 0 我们的代码库使用 PHP MySQLi 来查询 MySQL 服务器 在我们的测试设置中 我们发现绑定大量参数的
  • 添加推送通知时出现无效权利错误

    我正在尝试按照本教程向我的聊天应用程序添加推送通知 https www appcoda com firebase push notifications https www appcoda com firebase push notifica
  • 如何为动态创建的 QML 元素添加事件处理程序?

    我根据以下内容动态添加了一些 qml 组件到我的 gui 中这篇博文 http kunalmaemo blogspot kr 2011 04 creating qml element dynamically on html 如何为这些新创建
  • 如何在php中获取目录中的最新文件[重复]

    这个问题在这里已经有答案了 所以我有这个处理 CSV 文件的应用程序 我有一行代码来加载文件 myFile data FrontlineSMS Message Export 20120721 csv The name of the CSV
  • 有没有办法将开关与 String.contains("") 集成?

    我需要检查 String 对象是否包含 各种子字符串 并根据结果执行不同的代码片段 目前我有一系列的 else if 如果可能的话 我想将其转换为开关 有没有办法做到这一点 现在 if SomeString contains someSub
  • 编写 SQL 查询以删除 Woocommerce 中的旧订单

    我想删除 Woocommerce 中的一些旧订单数据 仅保留最近 12 个月的订单数据 这是我用来删除所有订单的 SQL 查询 DELETE FROM wp woocommerce order itemmeta DELETE FROM wp
  • Android - 相机功能指南

    我正在使用 SDK CameraPreview 中的示例以及此站点中的示例http marakana com forums android android examples 39 html http marakana com forums
  • 获取当前位置(GPS/WiFi)

    我正在尝试使用它来获取我的位置 如下所示 LocationManager myLocationManager LocationManager getSystemService Context LOCATION SERVICE Criteri
  • 如何在打字稿中组织类型/接口声明?

    我对打字稿有点陌生 让我有点困惑的事情之一是类型 接口声明 我正在编写一个库 当前有一些类和更多类型 接口声明 我在大部分代码中使用这些类型 接口 最初我会将它们保留在一个文件中types文件夹 然后我会在需要的地方导入它们 现在我有一个m
  • 如何使用 Python 获取 Selenium WebDriver 中的用户代理信息

    我正在尝试获取我在 Selenium 中使用的实际用户代理 目前使用chromedriver 我找到了这个问题的Java版本 如何在 Selenium Web 驱动程序中获取 userAgent 信息 https stackoverflow
  • 如何获取相对和绝对光标位置?

    我怎样才能得到当前光标位置与SWT I need The absolute位置 仅相对于当前Display 位置relative到当前活动的Control 这获取光标位置相对于当前显示 import org eclipse swt widg
  • 如何在 Scala 的 Play!2 表单中包含图片类型?

    根据本指南 http www playframework org documentation 2 0 2 ScalaFileUpload 可以通过手写html表单来上传文件 我想将文件上传作为包含文本字段 例如姓名和电子邮件 的更大表单的一
  • 使用 ng-repeat 或 ng-options 时如何删除初始空白选项并选择

    有角度的新手 过滤通过dataservice返回的json数据 过滤是通过dropdown完成的 我想做的是结合以下几点 我想删除通过 Angular 返回的初始空白值 我还想让它预先选择一个默认值 该值不是 包含在我的数据对象中 在我的例
  • 在 Swift 2.0 中更改 NSView 的背景颜色

    我正在尝试更改 NSView 的背景颜色 并尝试了中概述的解决方案之一这个答案 https stackoverflow com questions 26553444 swift nsviewcontroller background col
  • Zookeeper:主机名解析失败

    我在 OpenShift Kubernetes 环境中运行 Zookeeper 我已将 Zookeeper 设置为StatefulSet为了可靠地保存配置数据 我在我的配置中配置了三台服务器zoo cfg通过主机名 但在启动时 主机名解析失
  • Base64编码中为什么要使用padding? [复制]

    这个问题在这里已经有答案了 可能的重复 如果输入长度不能被3整除 为什么base64编码需要填充 https stackoverflow com questions 4080988 why does base64 encoding requ
  • 为什么用户登录后看不到动画?

    我创建了一个自定义 LaunchSreen 当用户未登录时它运行良好 但如果他登录了 我们就看不到动画 视图会直接转到主视图 并且不等待动画完成 你知道为什么吗 import SwiftUI struct LaunchScreen View
  • 在 Google 地图片段中显示当前位置

    我目前正在开发一个带有 Google 地图的片段 一旦用户访问该片段 他的地图应该缩放并聚焦于他的位置 但是 它显示世界地图而不是附近位置 靠近用户 SuppressWarnings unused public class Deferred
  • 数据断点是如何创建的?

    我只是想知道如何数据断点 又名观察点 创建了吗 我知道常见的断点是使用 x86 上的一些特殊 INT3 指令创建的 我想你可以创建software通过定期扫描内存来观察点 但是从编写带有硬件断点的自己的调试器的角度来看 我在Windows
  • 为什么要使用 pytest 工厂作为固定装置而不是工厂函数?

    In the py test 文档 https docs pytest org en latest fixture html factories as fixtures它描述了将工厂方法声明为固定装置 如下所示 pytest fixture