在Python中模拟构造函数助手方法

时间:2013-09-17 19:22:45

标签: python unit-testing mocking

我已按以下方式定义了构造函数。

def __init__(self):
    //set some properties
    ...
    self.helperMethod()

def helperMethod(self):
    //Do some operation

我想对辅助方法进行单元测试,但是为了创建对象来进行单元测试,我需要运行__init__方法。但是,这样做会调用helper方法,这是不可取的,因为这是我需要测试的方法。

我尝试嘲笑__init__方法,但收到错误__init__ should return None and not MagicMock

我也尝试用以下方式模拟帮助器方法,但我找不到手动恢复模拟方法的方法。 MagicMock.reset_mock()不会这样做。

SomeClass.helperMethod = MagicMock()
x = SomeClass()
[Need someway to undo the mock of helperMethod here]

对辅助方法进行单元测试的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您是否尝试过捕获helperMethod的原始值?

original_helperMethod = SomeClass.helperMethod
SomeClass.helperMethod = MagicMock()
x = SomeClass()
SomeClass.helperMethod = original_helperMethod

您还可以使用mock库中的patch装饰器

from mock import patch

class SomeClass():

    def __init__(self):
        self.helperMethod()

    def helperMethod(self):
        assert False, "Should not be called!"

x = SomeClass() # Will assert 
with patch('__main__.SomeClass.helperMethod') as mockHelpMethod:
    x = SomeClass() # Does not assert