在Python中模拟套接字连接

发布于 2021-01-29 14:58:13

我正在尝试为python中的类编写单元测试。该类在 init
上打开一个tcp套接字。我试图对此进行模拟,以便可以断言使用正确的值调用了连接,但是显然在单元测试中实际上并未发生。我已经厌倦了MagicMock,补丁程序等,但是还没有找到解决方案。

到目前为止我的班级看起来像

import socket

class MyClass(object):

    def __init__(self):
        self.tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.tcp_socket.connect('0.0.0.0', '6767')
关注者
0
被浏览
122
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如果您只想断言connect被正确调用,这很简单

    import mock
    import socket
    
    class MyClass(object):
    
        def __init__(self):
            self.tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.tcp_socket.connect('0.0.0.0', '6767')
    
    with mock.patch('socket.socket'):
        c = MyClass()
        c.tcp_socket.connect.assert_called_with('0.0.0.0', '6767')
    

    如果必须先导入模块才能访问MyClass,则需要稍微调整补丁:

    from mymodule import MyClass
    import mock
    
    with mock.patch('mymodule.socket.socket'):
        c = MyClass()
        c.tcp_socket.connect.assert_called_with('0.0.0.0', '6767')
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看