mock单测与libcmavsdk原生库脱钩
conftest新增fake_mavsdk fixture打桩mavsdk.offboard设定点类型, 两组网关测试autouse启用。修复树莓派原生库符号缺失时纯mock测试误失败 (该问题在树莓派实测暴露: 348条全绿不依赖mavsdk原生库)
This commit is contained in:
+39
-1
@@ -1,8 +1,46 @@
|
||||
"""pytest 根配置:保证无论从哪个工作目录启动 pytest,均可导入 utils/ 下的两个包。"""
|
||||
"""pytest 根配置:保证无论从哪个工作目录启动 pytest,均可导入 utils/ 下的包;
|
||||
并提供 fake_mavsdk fixture,使网关 mock 单测与真实 libcmavsdk.so 脱钩。"""
|
||||
|
||||
import sys
|
||||
import types
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
_UTILS_DIR = Path(__file__).resolve().parent
|
||||
if str(_UTILS_DIR) not in sys.path:
|
||||
sys.path.insert(0, str(_UTILS_DIR))
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def fake_mavsdk(monkeypatch):
|
||||
"""打桩 mavsdk.offboard 设定点类型(VelocityBodyYawspeed / VelocityNedYaw)。
|
||||
|
||||
MavsdkCommandGateway 构造设定点时惰性 `from mavsdk import offboard`——即便
|
||||
offboard 传输层是 mock,也会去加载真实原生库。libcmavsdk.so 损坏或未装的
|
||||
机器(如 libstdc++ 缺新符号的树莓派)上,纯 mock 单测会因此误失败。
|
||||
用法与 fake_serial 打桩 pyserial 同理:sys.modules 注入轻量桩模块。
|
||||
"""
|
||||
offboard_mod = types.ModuleType("mavsdk.offboard")
|
||||
|
||||
class VelocityBodyYawspeed:
|
||||
def __init__(self, forward_m_s, right_m_s, down_m_s, yawspeed_deg_s):
|
||||
self.forward_m_s = forward_m_s
|
||||
self.right_m_s = right_m_s
|
||||
self.down_m_s = down_m_s
|
||||
self.yawspeed_deg_s = yawspeed_deg_s
|
||||
|
||||
class VelocityNedYaw:
|
||||
def __init__(self, north_m_s, east_m_s, down_m_s, yaw_deg):
|
||||
self.north_m_s = north_m_s
|
||||
self.east_m_s = east_m_s
|
||||
self.down_m_s = down_m_s
|
||||
self.yaw_deg = yaw_deg
|
||||
|
||||
offboard_mod.VelocityBodyYawspeed = VelocityBodyYawspeed
|
||||
offboard_mod.VelocityNedYaw = VelocityNedYaw
|
||||
mavsdk_mod = types.ModuleType("mavsdk")
|
||||
mavsdk_mod.offboard = offboard_mod
|
||||
monkeypatch.setitem(sys.modules, "mavsdk", mavsdk_mod)
|
||||
monkeypatch.setitem(sys.modules, "mavsdk.offboard", offboard_mod)
|
||||
return offboard_mod
|
||||
|
||||
Reference in New Issue
Block a user