如何模拟'__init__'方法调用的方法

时间:2019-02-27 06:41:53

标签: python unit-testing mocking init

我的班级就像

import a

class Demo(object):
    def __init__(self):
        ......
        fun_return_value = a.methodB()
        ......

   def methodA(self):
       ......

测试类如下

class TestDemo(test.TestCase):

    def setUp(self):
        super(TestDemo, self).setUp()

    def test_methodA(self):
         ......

当我要进行methodA的单元测试时,有一个问题,我必须模拟a.methodB。但是我该怎么做?我检查了一下文档,却一无所获。 问其他人,并在类TestDemo的开头使用@mock.patch("a.methodB")。就像

    @mock.patch("a.methodB")
    class TestDemo(test.TestCase):

        def setUp(self, mock_methodB):
            super(TestDemo, self).setUp()
            mock_methodB.return_value=None

        def test_methodA(self):
             ......

但是它不起作用。如何模拟“ init ”方法所调用的方法?

2 个答案:

答案 0 :(得分:1)

找到了解决方法。

class TestDemo(test.TestCase):
    def setUp(self):
        super(TestDemo, self).setUp()
        self.mocks = [mock.patch('a.methodB',
                                  mock.MagicMock(return_value=None))]
        for single_mock in self.mocks:
            single_mock.start()
            self.addCleanup(single_mock.stop)

答案 1 :(得分:0)

  

修补程序可以用作TestCase类装饰器。它通过装饰类中的每个测试方法来工作。当您的测试方法共享一个公共补丁集时,这会减少样板代码。 patch()通过查找以patch.TEST_PREFIX开头的方法名称来查找测试。默认情况下,这是“测试”

来自the docs。这就是为什么您的代码无法正常工作的原因。相反,您可以使用start and stop methods