繁体   English   中英

在python @patch装饰器中使用self

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM