1
mockライブラリ(unittest.mock
のPython 3の場合)を使用してラッパーをsocket
のモザイクにする方法はありますか?モックライブラリを使ってソケットオブジェクトをモックする方法
これは私のラッパーです:
import socket
import utils
class TCPSocket:
def __init__(self):
self.buf = ''
def __enter__(self):
pass
def __exit__(self, exc_type, exc_val, exc_tb):
self.close()
def connect(self, host, port):
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.connect((host, port))
def close(self):
self.sock.close()
def send(self, data):
self.sock.send(data)
def sendall(self, data):
self.sock.sendall(data)
# For best match with hardware and network realities,
# the value of limit should be a relatively small power of 2, for example, 4096
def recv_some(self, limit=4096):
return self.sock.recv(limit)
def recv_bytes(self, count):
while len(self.buf) < count:
self.buf += self.recv_some()
parts = utils.split_first_n(self.buf, count)
self.buf = parts[1]
return parts[0]
def recv_until(self, delim):
while delim not in self.buf:
self.buf += self.recv_some()
parts = self.buf.split(delim, maxsplit=1)
self.buf = parts[1]
return parts[0]
私はrecv_untilとrecv_bytesなどの機能は、彼らが本当に必要なものを行うかどうかをテストします。
私はこのモックオブジェクトの使用方法を完全に理解していません。私は 'connect'と' recv_some'メソッドを持つ 'TCPSocket'というPythonの標準ライブラリから' socket'のラッパーを持っています。私はどうしたらいいですか? – FrozenHeart
実際に 'socket'をモックする必要がありますか、' TCPSocket'インスタンスをモックする必要がありますか?必要な正確なシナリオ、つまりモックオブジェクト、入力、および期待される出力を使用するコードで質問を編集してください。 – chepner
http://pastie.org/10814947 'recv_until'や' recv_bytes'のような関数が本当に必要なものを実行しているかどうかをテストしたい – FrozenHeart