私のクラス内で使用されるpyserialからSerialオブジェクトの読み書き機能をモックして、呼び出し引数をチェックして戻り値を編集したいと思っています作業。Pythonのメンバーオブジェクトメソッドを模擬してください
現在、私はこのように、ファイル 'serialdevice.py' を持っている:
import serial
class SerialDevice:
def __init__(self):
self._serial = serial.Serial(port='someport')
def readwrite(self, msg):
self._serial.write(msg)
return self._serial.read(1024)
は、その後、私はこのように、ファイル 'test_serialdevice.py' を持っている:
import mock
from serialdevice import SerialDevice
@mock.patch('serialdevice.serial.Serial.read')
@mock.patch('serialdevice.serial.Serial.write')
@mock.patch('serialdevice.serial.Serial')
def test_write(mock_serial, mock_write, mock_read):
mock_read.return_value='hello'
sd = SerialDevice()
resp = sd.readwrite('test')
mock_write.assert_called_once_with('test')
assert resp == 'hello'
しかし、両方が失敗をアサート。何とかmock_writeが引数'test'
で呼び出されず、writeメソッドが'hello'
文字列の代わりに模擬オブジェクトを返します。私も@patch('serial.Serial.write)
などを使って同じ結果を試してみました。返品オブジェクトmock_serial
も使用しています。 mock_read = mock_serial.read()
は動作していないようです。
コンストラクタ、つまりmock_serial
は、期待される引数で呼び出されるようです。
この場合、どのようにして実現できますか?
Pythonのバージョンは、2.7.9