首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python-can模块测试程序

如何使用python-can模块测试程序
EN

Stack Overflow用户
提问于 2021-10-22 10:05:23
回答 1查看 242关注 0票数 0

我正在实现一个使用can总线实例的类(总线实例是静态的,因为所有对象都应该使用相同的对象)。

代码语言:javascript
复制
# ./mymodule/__init__.py
import can


class UsingCanBUS:
    _bus = can.ThreadSafeBus(channel='can0', bustype='socketcan')
    
    def __init__(self) -> None:
        # other code
        # v here every object interacts with the bus
        self._listener = can.Listener()
        self._listener.on_message_received = self._handle_message

    def _send_message(self, id, data) -> bool:
        msg = can.Message(arbitration_id=id, data=data, extended_id=False)
        try:
            self._bus.send(msg)
        except can.CanError:
            return False
        else:
            return True

此代码最终将在raspberry上运行,因此可以在系统中正确设置can接口。

现在,如果我想要单元测试模块中的任何类方法或任何文件,总线尝试初始化,并且由于我不在目标系统上,它会抛出一个os错误(这是预期的)。

文件夹结构如下:

代码语言:javascript
复制
.
|- mymodule/
|    |- __init__.py
|    |- utils.py
|
|- tests/
|    |- __init__.py
|    |- test_utils/
|    |    |- __init__.py
|    |    |- test_utils.py

我不清楚该如何测试这段代码。我试着修补can模块:

代码语言:javascript
复制
#./tests/test_utils/test_utils.py

import pytest
from unittest.mock import patch


@patch('mymodule.can')
def test_something():
    from mymodule.utils import some_function
    # This doesn't work as the real python-can methods get called instead of the mocked ones

    assert some_function() == expected_result

我不明白我是用错了修补程序,还是我的方法完全偏离了方向。我希望从mymodule导入的can模块中的每个类都会得到模拟类的修补,但看起来并不是这样。

EN

回答 1

Stack Overflow用户

发布于 2022-03-24 06:54:32

Raspberry Pi不附带CAN驱动程序,所以您不能直接安装can-utils并模拟虚拟CAN。使用Raspberry Pi顶部的CAN收发器。你可以用这个特别的,我也用它来模拟。

CAN 485-罐帽

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69674975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档