python - 不调用模拟方法 socket.accept()
问题描述
我正在尝试模拟套接字的服务器端。这个例子不起作用,我不知道为什么(它仍然使用原始的 socket.socket.accept() 方法)。任何想法如何正确模拟监听套接字?
class MySocket:
def __init__:
self.socket = socket.socket()
def listen(self):
self.socket.accept() # original socket method
class MockConn:
def recv(self, int):
return b''
def close(self):
pass
def sendall(self, str):
pass
with mock.patch('socket.socket') as mock_socket:
conn = MockConn()
mock_socket.return_value.accept.return_value = (conn, 'localhost')
s = MySocket(None)
s.listen() # this should call accept from the mock
解决方案
对您当前的代码进行一些非常小的更改即可:
from unittest import mock
import socket
class MySocket:
def __init__(self): # init takes self
self.socket = socket.socket()
def listen(self):
return self.socket.accept() # original socket method
class MockConn:
def recv(self, int):
return b''
def close(self):
pass
def sendall(self, str):
pass
with mock.patch('socket.socket') as mock_socket:
conn = MockConn()
mock_socket.return_value.accept.return_value = (conn, 'localhost')
s = MySocket()
print(s.listen()) # this should call accept from the mock
输出:
(<__main__.MockConn object at 0x00000255C5A53B00>, 'localhost')
推荐阅读
- css - 更改 Switch Material UI 的颜色
- python - Python:我无法访问子列表中的单个元素。整个子列表显示为单个元素
- html - Bootstrap 4:防止向右移动的列(在 min-width:1200px 上使用浮动)将另一列向下推
- node.js - 加密/散列数据 GET 会捕获什么?
- selenium - 如何使用 gocolly twocaptcha 和 selenium 绕过重新验证码
- javascript - Bootstrap 5 - 以编程方式打开导航选项卡
- ios - 是否可以在 NSTimer 到达指定时间之前停止它?
- reactjs - 文本字段在表格 ReactJs 中无法正常工作
- html - 引导(AdminLTE)文件上传向导未在复选框中显示上传的文件名
- javascript - 如何调用另一个组件函数?