0
我想模擬從我的類中使用的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