在 python @patch 装饰器中使用 self

2023-12-19

我正在尝试使用python的mock.patch来用nose实现单元测试。

class A:

    def setUp(self):
        self.b = 8 #contrived example

    @patch.object('module.class', 'function', lambda x: self.b)
    def testOne(self):
        # do test #

在这里,补丁抱怨它不认识自己(这是正确的)。以干净的方式获得此类功能的最佳方法是什么?

我知道我可以使用全局变量,或者我可以在测试中模拟它(但这涉及我在测试结束时清理对象)。


你不能使用self在方法装饰器上,因为您位于类定义中并且该对象不存在。如果您确实想访问self而不仅仅是使用一些静态值,您可以考虑遵循以下方法:totest是我的 python 路径中的一个模块fn是我要修补的方法,而且我正在使用固定的return_value而是一个更具可读性示例的函数

class MyTestCase(unittest.TestCase):
    def setUp(self):
        self.b = 8 #contrived example

    def testOne(self):
        with patch('totest.fn', return_value=self.b) as m:
            self.assertEqual(self.b, m())
            self.assertTrue(m.called)

    @patch("totest.fn")
    def testTwo(self,m):
        m.return_value = self.b
        self.assertEqual(self.b, m())
        self.assertTrue(m.called)

In testOne() I use patch作为上下文,我将可以完全访问self. In testTwo()(这是我的标准方式)我设置了我的模拟m在测试开始时然后使用它。

最后我用了patch()代替patch.object()因为我真的不明白你为什么需要patch.object()但您可以根据需要更改它。

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

在 python @patch 装饰器中使用 self 的相关文章

随机推荐

  • 如何使用 PHP 从 JSON 中提取和访问数据?

    这是一个一般性的参考问题和答案 涵盖许多永无休止的问题 如何访问 JSON 中的数据 问题 它在这里处理在 PHP 中解码 JSON 并访问结果的广泛基础知识 我有 JSON type donut name Cake toppings id
  • Keycloak - 通过 /realms/{realm}/protocol/openid-connect/userinfo 获取用户信息时出现 401 响应 (USER_INFO_REQUEST_ERROR)

    我使用以下 Docker 命令在本地部署了 Keycloak docker run p 8080 8080 e KEYCLOAK ADMIN admin e KEYCLOAK ADMIN PASSWORD 管理员 quay io keycl
  • Blazor oauth2 被 CORS 阻止

    我在服务器端有一个控制器 如下所示 HttpGet public IActionResult Test string returnUrl return Challenge new AuthenticationProperties Redir
  • 允许内存大小 * 字节耗尽,在 php 中

    我在 php ini 中遇到 内存不足 错误 我知道它可以用 ini set memory limit 64M 之类的方法来修复 但我不想这样做 因为脚本的这么多内存是不正常的 我有一些报告非常大 以至于我非常需要内存 但通常不需要 问题是
  • Gmail 和日历 API 的 nextPageToken 会被记住多长时间?

    Gmail 和日历 API 返回nextPageToken响应中的值users messages list and events list需要分页时的端点 如果值nextPageToken在对这些端点的下一个请求中提供 则返回下一页结果 我
  • UIButton 在 UIScrollView 的初始框架之外不可单击

    我遇到了 UIScrollView 的奇怪行为 即放大 UIScrollView 的 contentSize 后无法单击 UIButton 我想做的 使用 UIScrollView 显示表单 单击提交按钮后 滚动视图将放大一定的高度以显示更
  • 如何在 ASP.NET 5 RC1 MVC 中使用 IFormFile 保存上传的文件

    我将 ASP NET 5 RC 与 Visual Studio 2015 结合使用 我定义了一个 ViewModel public class TeamVM public IFormFile UploadedLogo get set 和一个
  • Phpunit,模拟 SoapClient 有问题(模拟魔术方法)

    我尝试使用以下代码来模拟 SoapClient soapClientMock this gt getMockBuilder SoapClient gt disableOriginalConstructor gt getMock soapCl
  • jQuery:计算 .each() 内 ajax 调用的成功次数

    我需要计算对列表中的每个项目成功执行 jQuery ajax 调用的次数 我从这里开始 但后来意识到由于 ajax 的 异步 部分 这不起作用 var numSuccessfullUpdates 0 saveMyListItems clic
  • 如何升级 NumPy?

    当我使用安装 OpenCV 时Homebrew https en wikipedia org wiki Homebrew 28package management software 29 brew 每当我运行此命令进行测试时 我都会遇到此问
  • 在 Vim 的搜索模式中使用大括号量词 \d{5}

    我似乎无法在 Vim 中使用这种模式 d 4 但只能使用 d d d d 搜索时 知道发生了什么事吗 note 我是 Vim 新手 I used in Normal Mode并输入了图案 d 4 or v d 4 read h magic欲
  • 对图中的着色点

    我想根据某些行索引对成对图中的点进行着色 这是我用来绘制一个变量与另一个变量的关系的代码 cases lt which rownames data no na in colnames tumor data controls lt which
  • Amazon Athena - 将时间戳转换为日期?

    看着日期 时间 Athena 文档 https prestodb io docs 0 172 functions datetime html 我没有看到执行此操作的函数 这让我感到惊讶 我看到的最接近的是date trunc week ti
  • 从另一个 DataFrame 的索引列表中提取 DataFrame

    我有一个数据帧 A 和一个索引列表 I 我想生成 获取一个数据帧 B 它仅包含原始数据帧 A 的索引 I 中的数据 我怎样才能实现这个目标 假设I 1 3 我试过这个A filter items I axis 0 这是正确的方法吗 还是有更
  • setTimeout() 和 setInterval() 之间的区别[重复]

    这个问题在这里已经有答案了 我试图根据我向下滚动页面的程度沿着 y 方向的大 div 移动一个小 div 但是我发现使用 setTimeout 和 setInterval 会给出两个完全不同的结果 实际上 setInterval 多次被浏览
  • 为什么这个阶乘算法不准确

    抱歉 我觉得问这个问题很愚蠢 并且准备好失去一半的分数 但为什么这个算法不起作用 它在一定程度上有效 数字 13 之后的阶乘有点偏离 例如 在数十万位及以后的数字并不完全匹配 include
  • 如何将RGB图像转换为CMYK图像?

    我想将 RGB 图像转换为 CMYK 这是我的代码 第一个问题是 当我将每个像素除以 255 时 该值接近于零 因此生成的图像近似为黑色 第二个问题是我不知道如何将单通道结果图像转换为 4 通道 当然 我不确定下面代码中制作的CMYK是否正
  • 在 VBA 中创建计数器

    我想知道是否有一种有效的方法可以使用 vba 创建计数机制Worksheet SelectionChange事件 我想计算特定单元格被选择的次数 如果选择该单元格 则变量将增加 1 否则不会对变量进行任何更改 Dim S As String
  • SSL 证书可以由多个证书颁发机构签名吗?

    如果能稍微分散一点信任就好了 这样我们在任何情况下都不必只依赖一个根 是否可以有一个证书由多个 CA 签署 No the X509证书格式 https www rfc editor org rfc rfc5280直到版本 3 的设计都只包含
  • 在 python @patch 装饰器中使用 self

    我正在尝试使用python的mock patch来用nose实现单元测试 class A def setUp self self b 8 contrived example patch object module class functio