gpt4 book ai didi

python - 在 python @patch 装饰器中使用 self

转载 作者:太空狗 更新时间:2023-10-30 02:10:47 25 4
gpt4 key购买 nike

我正在尝试使用 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 #

在这里,patch 提示它不认识自己(这是正确的)。以干净的方式获得这种功能的最佳方法是什么?

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

最佳答案

你不能在方法装饰器上使用 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)

testOne() 中,我使用 patch 作为上下文,我将拥有对 self 的完全访问权限。在 testTwo()(这是我的标准方式)中,我在测试开始时设置了我的模拟 m,然后使用它。

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

关于python - 在 python @patch 装饰器中使用 self,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26979285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com