如何模拟导入实例的方法

时间:2017-05-12 10:43:21

标签: python unit-testing mocking

我正在为一些python模块编写单元测试。但是,我无法想办法模拟导入实例的方法。下面是我要测试的python模块。

- bar.py -

delete

- foo.py -

class A():
    @classmethod
    def method_1(self):
        ...    
a = A()

- test_foo.py -

from bar import a
class B():
    @classmethod
    def b(cls):
        if a.method_1():
            return True
        else:
            return False

这不起作用。我的测试用例仍在调用原始from foo import B class TestB(TestCase): @patch('foo.a.method_1') def test_b(self, mock_method_1): mock_method_1.return_value = True test_b = B.b() ... 而不是我嘲笑的那个。

1 个答案:

答案 0 :(得分:0)

请改用patch.object decorator。它修补了对象的属性,而不是修补全局方法。

如果这不起作用,请尝试修补bar.a代替foo.a,但我不认为这是您的问题。

更新

问题变成了一个类方法,所以我认为这样可行:

- test_foo.py -

from foo import B

class TestB(TestCase):
    @patch('bar.A.method_1')
    def test_b(self, mock_method_1):
          mock_method_1.return_value = True
          test_b = B.b()
          ...
相关问题