[英]using self in python @patch decorator
我正在尝试使用python的mock.patch来实现带鼻子的单元测试。
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)
在testOne()
我使用patch
作为上下文,我将拥有对self
的完全访问权限。 在testTwo()
(这是我的标准方式)我在测试开始时设置我的模拟m
然后使用它。
最后我使用patch()
而不是patch.object()
因为我真的不明白你为什么需要patch.object()
但你可以随意改变它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.