繁体   English   中英

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

[英]How to mock the method which was called by the method of '__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 ”方法调用的方法?

已经找到了修复它的方法。

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)

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

文档 这就是您的代码不起作用的原因。 您可以做的是使用start 和 stop 方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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