在python中模拟成员对象方法

2024-09-27 21:28:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想模拟pyserial中Serial对象的读写函数,它在我的类中使用,以检查调用参数并编辑返回值,但它似乎不起作用。你知道吗

目前我有一个文件'串行设备.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)

然后我有一个文件测试_串行设备.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方法返回一个mock对象,而不是'hello'字符串。我也尝试过使用@patch('serial.Serial.write)等,得到同样的结果。同样使用mock_serial的返回对象,例如mock_read = mock_serial.read()似乎不起作用。你知道吗

然而,构造函数,即mock_serial,似乎是用预期的参数调用的。你知道吗

在这种情况下,我怎样才能达到我想要的?你知道吗

python版本是2.7.9


Tags: 对象testimportselfhelloread参数def
1条回答
网友
1楼 · 发布于 2024-09-27 21:28:47

显然,您必须使用mock\ u serial对象的返回值作为构造函数返回的实例,例如

mock_serial.return_value.read.return_value = 'hello'

这很管用,但我还是想知道有没有更好的方法

相关问题 更多 >

    热门问题