模拟 subprocess.Popen 依赖于导入样式

2023-11-30

当尝试模拟 Popen 时,只有当子进程的导入在单元测试代码和主模块代码中都匹配时,我才能使其成功。

给出以下模块 listdir.py:

from subprocess import Popen, PIPE

def listdir(dir):
    cmd = ['ls', dir]
    pc = Popen(cmd, stdout=PIPE, stderr=PIPE)
    out, err = pc.communicate()
    if pc.returncode != 0:
        raise Exception
    return out

和以下单元测试代码 test_listdir.py

import subprocess
import listdir
import mock

@mock.patch.object(subprocess, 'Popen', autospec=True)
def test_listdir(mock_popen):
    mock_popen.return_value.returncode = 0
    mock_popen.return_value.communicate.return_value = ("output", "Error")
    listdir.listdir("/fake_dir")

由于某些原因,由于两个 python 模块之间的导入样式不同,Popen 没有被模拟,并且运行测试总是会引发异常。

如果我更改 listdir.py 以导入所有子过程,例如

import subprocess

def listdir(dir):
    cmd = ['ls', dir]
    pc = subprocess.Popen(cmd, stdout=subprocess.PIPE, 
                          stderr=subprocess.PIPE)
    out, err = pc.communicate()
    if pc.returncode != 0:
        raise ListingErrorException
    return out

然后在测试中返回“输出”。

任何人都愿意解释为什么,我的首选是 两个模块中都有 from subprocess import Popen, Pipe ,但我无法对其进行模拟。


您需要修补 listdir 中的 Popen 副本,而不是刚刚导入的副本。所以,而不是@mock.patch.object(subprocess, 'Popen', autospec=True), try @mock.patch.object(listdir, 'Popen', autospec=True)

请参阅此文档以获取更多信息:http://www.voidspace.org.uk/python/mock/patch.html#where-to-patch

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

模拟 subprocess.Popen 依赖于导入样式 的相关文章

  • 如何在 Matplotlib 饼图周围绘制箭头以将每个标签指向圆圈中各自的部分?

    我一直在用 Matplotlib 绘制一些图表 我有一个饼图 想要在图表周围绘制箭头 使每个标签都指向图表 我有一个例子 这是我当前的代码 import matplotlib pyplot as plt plt rcParams font
  • 为什么 dataclasses.astuple 返回类属性的深层副本?

    在下面的代码中astuple函数正在执行数据类的类属性的深层复制 为什么它不能产生与函数相同的结果my tuple import copy import dataclasses dataclasses dataclass class Dem
  • matplotlib 图中点的标签

    所以这是一个关于已发布的解决方案的问题 我试图在我拥有的 matplotlib 散点图中的点上放置一些数据标签 我试图在这里模仿解决方案 是否有与 MATLAB 的 datacursormode 等效的 matplotlib https s
  • VSCode Settings.json 丢失

    我正在遵循教程 并尝试将 vscode 指向我为 Scrapy 设置的虚拟工作区 但是当我在 VSCode 中打开设置时 工作区设置 选项卡不在 用户设置 选项卡旁边 我还尝试通过以下方式手动转到文件 APPDATA Code User s
  • python multiprocessing 设置生成进程等待

    是否可以生成一些进程并将生成进程设置为等待生成的进程完成 下面是我用过的一个例子 import multiprocessing import time import sys def daemon p multiprocessing curr
  • PyQt 使用 ctrl+Enter 触发按钮

    我正在尝试在我的应用程序中触发 确定 按钮 我当前尝试的代码是这样的 self okPushButton setShortcut ctrl Enter 然而 它不起作用 这是有道理的 我尝试查找一些按键序列here http ftp ics
  • 矩形函数的数值傅里叶变换

    本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换 为此 我选择矩形函数 这里报告了它的解析表达式及其傅立叶变换https en wikipedia org wiki Rectan
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • 为什么一旦我离开内置的运行服务器,Django 就无法找到我的管理媒体文件?

    当我使用内置的简单服务器时 一切正常 管理界面很漂亮 python manage py runserver 但是 当我尝试使用 wsgi 服务器为我的应用程序提供服务时django core handlers wsgi WSGIHandle
  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla
  • 为什么 Google 测试会出现段错误?

    我是 Google Test 的新手 正在尝试提供的示例 我的问题是 当我引入失败并设置GTEST BREAK ON FAILURE 1 或使用命令行选项 GTest 将出现段错误 我正在考虑这个例子 https code google c
  • 如何将 GAE 中一种 Kind 中的所有实体复制到另一种 Kind 中,而无需显式调用每个属性

    我们如何使用function clone entity 如中所述在 Python 中复制 Google App Engine 数据存储中的实体 而无需在 编译 时知道属性名称 https stackoverflow com question
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • Spider 必须返回 Request、BaseItem、dict 或 None,已“设置”

    我正在尝试从以下位置下载所有产品的图像 我的蜘蛛看起来像 from shopclues items import ImgData import scrapy class multipleImages scrapy Spider name m
  • 重新分配唯一值 - pandas DataFrame

    我在尝试着assign unique值在pandas df给特定的个人 For the df below Area and Place 会一起弥补unique不同的价值观jobs 这些值将分配给个人 总体目标是使用尽可能少的个人 诀窍在于这
  • 制作一份 Python 文档的 PDF 文件

    Python 官方网站提供 PDF 文档下载 但它们是按章节分隔的 我下载了源代码并构建了 PDF 文档 这些文档也是单独的 PDF 我怎么能够从源代码中的 Makefile 构建一个 PDF 文件 我认为这样阅读起来会更方便 如果连接单独
  • 根据 Pandas 中的列表选择数据框行的子集

    我有一个数据框df1并列出x In 22 import pandas as pd In 23 df1 pd DataFrame C range 5 B range 10 20 2 A list abcde In 24 df1 Out 24
  • 如何使用 PrimaryKeyRelatedField 更新多对多关系上的类别

    Django Rest 框架有一个主键相关字段 http www django rest framework org api guide relations primarykeyrelatedfield其中列出了我的 IDmany to m
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视
  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size

随机推荐

  • hcmap 与 R Shiny 中的本地文件 javascript

    我正在shiny ui和服务器 上开发一个应用程序 我想用Highchart包的hcmap函数实现一个地图 但是 在实现地图时 我发现函数 hcmap 与站点存在依赖关系 https code highcharts com mapdata
  • 动态方法调度

    网上有很多关于动态调度的信息 我感觉自己像个胆小鬼 因为我无法实现它 请帮我 这就是我正在尝试做的事情 ClassA public void createReq public String postReq ClassB Test publi
  • 将动态参数传递给 SQL Server 2008 中的存储过程

    我有这个过程执行另一个由参数及其参数传递的过程datefrom and dateto CREATE procedure dbo execute proc procs varchar 200 pdatefrom date pdateto da
  • 启用 Google API OAuth 范围

    对于使用 Google Apps 脚本创建的应用程序之一 会在我的应用程序中自动添加一些范围 如下所示 https www googleapis com auth drive https www googleapis com auth sc
  • master和reduce之间共享数据

    我需要使用所有reduce 任务的结果执行聚合 基本上 reduce 任务会找到总和 计数以及一个值 我需要将所有总和和计数相加并找到最终平均值 我尝试使用conf setInt在减少 但是当我尝试从主函数访问它时它失败了 class Ma
  • 3D线平面相交,与简单平面

    我在 3D 空间中有两个点 它们的 X 坐标具有不同的符号 所以其中一个肯定位于 X 平面的一侧 另一个位于 X 平面的另一侧 现在我想以最简单和优化的方式找到该平面与两点组成的线的交点 我知道如何进行一般线平面相交 但由于在这种情况下平面
  • python中的OpenCV透视变换

    我正在尝试用 python 校正图像 我有一个单应性 H 来自绕 x y 和 z 轴旋转的旋转矩阵 如下所示 9 95671447e 01 7 83610423e 02 7 47993630e 02 7 69292630e 02 9 965
  • QSqlQuery 准备好的语句 - 正确使用

    我正在尝试确定将准备好的语句与 QSqlQuery 一起使用的正确方法 这些文档对于这个主题不是很具体 void select const QSqlDatabase database QSqlQuery query database que
  • 如何使用 Golem Shiny 应用程序将 4 个盒子排成一排?

    我正在尝试将每行 4 个盒子放入我闪亮的应用程序中 BioTuring 和 Scope 我希望与 FLAT 和 GTEx 对齐在同一行 现在看起来是这样的 需要注意的是 这个应用程序是用 golem 结构完成的 因此 请在帮助时牢记并遵循我
  • 从 .mexglx 到 .mex

    我得到了一个使用外部 C 函数的 Matlab 程序 我只有这个外部函数的编译版本 扩展名是 mexglx 从我已经红色的来看 这个扩展似乎是用linux编译的mex文件版本 我在 Windows XP 下运行 matlab 我的问题是我的
  • 如何通过 NPM 脚本使用 Windows 控制台“设置”变量?

    这在 Windows 控制台中按预期工作 set A qwerty echo A 输出 qwerty 但是当我尝试在 NPM 脚本中运行相同的命令时 包 json scripts qwerty set A qwerty echo A gt
  • 使用 JavaScript 自动填写表单

    这是我的代码 function setActualDate var d1 new Date var y d1 getFullYear var d d1 getDate var m1 d1 getMonth 1 var m2 d1 getMo
  • HttpURLConnection POST,conn.getOutputStream() 抛出异常

    我想使用 HttpURLConnection 进行 POST 我正在以两种方式尝试这一点 但在执行时我总是会遇到异常 conn getOutputStream 我在这两种情况下得到的例外是 java net SocketException
  • Java Spring-data Mongo中的Mongodb请求

    我在文档中有一个数组 id id 1 name name 1 additionalData additionalDataId id 1 1 additionalDataName name 1 1 longText A long story
  • 创建一个pandas表

    在使用 pandas 时 如何显示与此类似的表格 我想我必须使用类似于的数据框df pandas DataFrame results 并显示它display display df 但从那里我不知道该怎么办 您可以将字典传递为data当你使用
  • 如何传递带有存储在单个变量中的引号的命令行参数?

    我想从 shell 脚本调用外部应用程序 但此 shell 脚本在单个变量中获取参数 来自其他脚本 一切都很好 直到我不必对单个参数使用双引号 而是用空格分隔单词 这是我的问题的简化示例 sh param 只是打印所有传递的参数 bin s
  • 在消息框中显示非英语文本

    我在 MS Access 中的应用程序中编写了以下代码 以波斯语 非英语 显示消息框 但是当我输入波斯语 Persion 时 它会键入一些特殊 未知 不同的字符 而且当我运行应用程序时 消息框显示特殊 不同的字符 而不是我想要显示的 msg
  • 在 boost::asio 的上下文中,术语“strand”背后的隐喻是什么?

    As a French native and a boost asio user I have added the strand word to my vocabulary is a toron in French here an imag
  • JAVA链表如何用for循环进行循环?

    您好 我正在尝试创建一个循环遍历链表的 for 循环 对于每条数据 它都会单独列出 我想在这里学习链表 所以没有数组建议 有人知道怎么做吗 示例输出 187 航班 501航班 到目前为止我的代码如下 public static Linked
  • 模拟 subprocess.Popen 依赖于导入样式

    当尝试模拟 Popen 时 只有当子进程的导入在单元测试代码和主模块代码中都匹配时 我才能使其成功 给出以下模块 listdir py from subprocess import Popen PIPE def listdir dir cm