Python 2.7 如何模拟初始化__

Python 2.7 如何模拟初始化__,python-2.7,mocking,Python 2.7,Mocking,我的课程是: class MainClass: def __init__(self, data): self.data = data class UserClass: def some_function(): instance = MainClass("Hello") 现在我想测试是否使用data=“Hello”调用MainClass类。 如何做到这一点。 我搜索了这个,但什么也看不出来。不管需要测试类的\uuuu init\uuuu方法背后的

我的课程是:

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

class UserClass:
    def some_function():
        instance = MainClass("Hello")
现在我想测试是否使用data=“Hello”调用MainClass类。 如何做到这一点。
我搜索了这个,但什么也看不出来。

不管需要测试类的
\uuuu init\uuuu
方法背后的动机是什么(正如在对原始问题的评论中所讨论的那样),OP会问“是否使用data=“Hello”调用类MainClass”。我将回答这个问题

首先,是的,这是可以做到的

接下来,如何做到这一点:

  • 使用
    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”方法)。

在我的整个职业生涯中,从未见过任何人模拟构造。你想测试什么?给定MainClass(“Hello”)实例。数据==“Hello”?Mock不是你的类,所以如果你模拟了它的构造,你还没有测试你的类的构造……我有一个应用程序,在处理完所有其他数据后,它将调用MainClass,并将处理后的数据传递给MainClass。我想测试到达MainClass的数据是否正确无误,您想测试MainClass init是否执行了它应该执行的操作,还是想测试某个函数是否初始化了MainClass,我有两个不同的测试。一个是一个应用程序,它将用户输入的数据处理成某种特定的格式,在格式化数据后,它将把数据传递给第二部分,即MainClass。现在我想测试是否使用正确的数据调用main类的构造。这样我就可以确信我的应用程序工作正常。我们彼此都在闲聊。单元测试将是正确的数据生成,MainClass被构造,MainClass构造函数做它应该做的事情。端到端是集成测试,而不是单元测试。您可以MockMainClass来查看它的构造函数是否是从某个函数调用的,但这并不涉及mockInit本身。