当前位置: 首页 > 面试题库 >

使用Python Mock模拟功能

穆锋
2023-03-14
问题内容

我正在尝试Mock使用python模拟模块的函数(返回一些外部内容)。

我在导入模块的模拟函数时遇到了一些麻烦。

例如,在util.py我有

def get_content():
  return "stuff"

我想嘲笑,util.get_content以便它返回其他内容。

我正在尝试:

util.get_content=Mock(return_value="mocked stuff")

如果get_content在另一个模块中被调用,它实际上似乎永远不会返回模拟对象。我在使用方法方面缺少什么Mock吗?

请注意,如果我调用以下内容,则一切正常:

>>> util.get_content=Mock(return_value="mocked stuff")
>>> util.get_content()
"mocked stuff"

但是,如果get_content从另一个模块内部调用,它将调用原始函数而不是模拟版本:

>>> from mymodule import MyObj
>>> util.get_content=Mock(return_value="mocked stuff")
>>> m=MyObj()
>>> m.func()
"stuff"

内容 mymodule.py

from util import get_content

class MyObj:    
    def func():
        get_content()

所以我想我的问题是-如何从我调用的模块内部调用函数的模拟版本?

看来,这from module import function可能归咎于它,因为它没有指向Mocked函数。


问题答案:

我认为我有一个解决方法,尽管在如何解决一般情况上还不太清楚

在中mymodule,如果我替换

from util import get_content

class MyObj:    
    def func():
        get_content()

import util

class MyObj:    
    def func():
        util.get_content()

Mock似乎被调用。看起来名称空间需要匹配(这很有意义)。但是,奇怪的是我希望

import mymodule
mymodule.get_content = mock.Mock(return_value="mocked stuff")

在使用from /
import语法(现在可以get_content插入mymodule)的原始情况下实现技巧。但这仍然是指未经嘲弄的get_content

事实证明,名称空间很重要-编写代码时只需记住这一点。



 类似资料:
  • 问题内容: 我正在通过编写一个小型个人项目来学习Go。即使很小,我还是决定从头开始进行严格的单元测试,以学习Go的良好习惯。 琐碎的单元测试都很好而且花哨的,但是我现在对依赖项感到困惑;我希望能够用模拟函数替换一些函数调用。这是我的代码片段: 我希望能够测试downloader()而不实际通过http获取页面- 即通过模拟get_page(更容易使用,因为它仅将页面内容作为字符串返回)或http.

  • 问题内容: 首先,我是和的新手。 我有一个实例化的类,我想测试一下。 这是我的代码: 我想测试一下我的功能。我的头,我认为测试fs.existsSync的状态是个好主意。如果返回,则必须调用。所以我尝试写一些测试: 但是,我有一个错误: 您能帮我调试和测试我的功能吗? 问候。 问题答案: 出现错误是因为它正在寻找在您的对象上调用的方法,该方法不存在。如果您可以访问测试中的模块,则可以监视如下方法:

  • 本文向大家介绍Vue使用json-server进行后端数据模拟功能,包括了Vue使用json-server进行后端数据模拟功能的使用技巧和注意事项,需要的朋友参考一下 正开发过程中 前后端分离或者不分离 ,接口多半是之后与页面的开发 ,所以建立rest的APL的接口 给前端提供虚拟的数据是非常必要的 所以这里我使用了json-server作为工具,支持CORS和JSONP跨域请求,支持GET, P

  • 本文向大家介绍使用JavaScrip模拟实现仿京东搜索框功能,包括了使用JavaScrip模拟实现仿京东搜索框功能的使用技巧和注意事项,需要的朋友参考一下 使用js模拟实现京东的搜索框,主要用了js中的onfocus(注册焦点事件),onblur(失去焦点的事件); 主要实现了: 在鼠标点进去的时候,里面的默认内容消失; 在输入之后,再点击搜索框外,输入的内容还在搜索框中; 如果输入为空,点击搜索

  • 出于学校目的,我正在创建一个使用股票API的应用程序。 我正在尝试为一种获取过去10年所有股票数据的方法编写一个测试。我不想实际获取所有这些数据,而是想抛出一个异常。 我想测试的方法: 股票时间系列(....)调用可以抛出阿尔法仓位异常。 我这样嘲弄了TimeSeries类: 在我的测试类中,我想模拟这个调用,并返回一个异常而不是实际数据。 无论我多么试图嘲笑这段代码,它永远不会抛出异常。它将始终

  • 问题内容: 我正在尝试使用富有想象力的Mock测试库测试Django应用程序时模拟某些东西。我似乎无法完全正常工作,我正在尝试这样做: 我究竟做错了什么? 问题答案: 啊,我对在哪里应用该补丁装饰感到困惑。固定: