我正在尝试使用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(使用前将#替换为@)