小编use*_*527的帖子

Python-如何对i2c设备包装器类进行单元测试

我有一个python类,用于抽象通过i2c连接的专用设备(功率传感器)。我将python-smbus模块用于I2c访问。当然,在该类中,我有current_ma使用smbus.SMBus()该类的方法(即,以毫安为单位返回当前值)。

import smbus

class PowerSensor(object):
    def __init__(self, bus, addr):
        self.__bus = smbus.SMBus(bus)
        self.__addr = addr

    def current_ma(self):
        data = self.__bus.read_i2c_block_data(self.__addr, 0x04)
        if data[0] >> 7 == 1:
            current = data[0] * 256 + data[1]
            if current & (1 << 15):
                current = current - (1 << 16)
        else:
            current = (data[0] << 8) | (data[1])
        return current / 10
Run Code Online (Sandbox Code Playgroud)

要对current_ma方法进行单元测试,我必须模拟smbus访问。我的第一个想法是修补该read_i2c_block_data方法:

mock.patch('power_sensor.smbus.SMBus.read_i2c_block_data')
Run Code Online (Sandbox Code Playgroud)

但是,如果我在执行测试时这样做,则会得到:

TypeError: can't set attributes of built-in/extension type 'smbus.SMBus'
Run Code Online (Sandbox Code Playgroud)

我很确定,这是因为smbus …

python unit-testing mocking i2c

5
推荐指数
0
解决办法
251
查看次数

标签 统计

i2c ×1

mocking ×1

python ×1

unit-testing ×1