如何模拟__init__

时间:2014-05-04 10:25:05

标签: python-2.7 mocking

我有一个班级:

class MainClass:
    def __init__(self, data):
        self.data = data

class UserClass:
    def some_function():
        instance = MainClass("Hello")

现在我想测试是否使用data =" Hello"来调用类MainClass。 如何做到这一点。 我搜索了这个,但无法解决任何问题。

1 个答案:

答案 0 :(得分:0)

不管测试类的__init__方法背后的动机是什么(正如对原始问题的评论所讨论的那样),OP都在问“ 是否通过数据=调用了MainClass类”您好”。这怎么办”,我将回答这个问题。

首先,是的,可以做到。

接下来,该怎么做:

  • 使用__init__修补类patch.object的方法
  • 新方法通过Mock
  • 检查已使用预期数据调用了模拟方法

在代码中:

from mock import Mock, patch

def test_init_called_with_specific_data():
    data = "Hello"
    with patch.object(MainClass, "__init__", Mock(return_value=None)):
        instance = MainClass(data)
        instance.__init__.assert_called_with(data)

根据应用程序,您可能希望使用模拟整个类的MagicMock,其中包括魔术方法(魔术方法是指以双下划线开头和结尾的方法,又称“ dunder”方法)。