4.9 KiB
4.9 KiB
DataRouter 单元测试用例文档
测试环境
| 项目 | 内容 |
|---|---|
| 语言标准 | C11 |
| 编译器 | GCC 11.4.0 |
| 测试框架 | 自定义轻量框架(宏 + goto cleanup) |
| 构建系统 | CMake ≥ 3.10 |
| 发送能力 | sensor / status |
| 接收能力 | rtcm / command |
运行方式
cmake -S . -B build
cmake --build build
ctest --test-dir build
# 或直接运行:
./build/test_datarouter
测试用例列表
1. 未初始化(1 个)
| # | 测试名 | 描述 | 步骤 | 预期 |
|---|---|---|---|---|
| 1 | error_uninit |
未 init 时发送 | 不调 init 直接 send_sensor(0, ...) |
返回 -1 |
2. 端口管理(4 个)
| # | 测试名 | 描述 | 步骤 | 预期 |
|---|---|---|---|---|
| 2 | port_create_basic |
基本创建 | port_create() |
返回 ≥ 0 |
| 3 | port_create_max |
满容量(64) | 循环创建到满再尝试 | 64 个成功,第 65 个 INVALID |
| 4 | port_delete_invalid |
删除无效 ID | delete(-1) + delete(999) |
不崩溃 |
| 5 | port_default_state |
默认状态 | 创建端口,查 send/recv/handler | send_type=-1, recv_type=-1, count=0 |
3. send_type / recv_type 独立设置(6 个)
| # | 测试名 | 描述 | 步骤 | 预期 |
|---|---|---|---|---|
| 6 | send_type_set_get |
设置发送类型 | set_send_type(sensor) → get_send_type() |
返回 sensor |
| 7 | recv_type_set_get |
设置接收类型 | set_recv_type(rtcm) → get_recv_type() |
返回 rtcm |
| 8 | types_independent |
收发互不干扰 | 同时 set_send_type(sensor) + set_recv_type(command) |
get_send=sensor, get_recv=command |
| 9 | send_type_clear |
清除发送类型 | set_send_type(sensor) → set_send_type(-1) |
get_send_type() == -1 |
| 10 | recv_type_clear |
清除接收类型 | set_recv_type(rtcm) → set_recv_type(-1) |
get_recv_type() == -1 |
| 11 | types_from_invalid |
无效端口查类型 | get_send_type(-1/999) / get_recv_type(-1/999) |
均返回 -1 |
4. handler 增删(2 个)
| # | 测试名 | 描述 | 步骤 | 预期 |
|---|---|---|---|---|
| 12 | handler_add_remove |
添加后移除 | ① add(a) add(b) count=2 ② remove(a) count=1 | count 正确 |
| 13 | handler_clear |
清除全部 | add 后 clear | count == 0 |
5. 发送触发(9 个)
| # | 测试名 | 描述 | 步骤 | 预期 |
|---|---|---|---|---|
| 14 | send_one_handler |
单 handler 发送 | send_type + add_handler → send_sensor | 返回 0;handler 被调用 1 次 |
| 15 | send_multi_handlers |
三个 handler 广播 | 注册 3 个 handler 后 send | 返回 0;handler 被调用 3 次 |
| 16 | send_type_mismatch |
发送类型不匹配 | set_send_type(sensor) 但调用 send_status | 返回 -3;handler 不被调用 |
| 17 | send_no_handler |
未注册 handler | 只 set_send_type 不 add_handler | 返回 -4 |
| 18 | send_no_send_type |
没有 send_type | 端口只有 recv_type,调 send_sensor | 返回 -3 |
| 19 | send_remove_handler |
移除后少广播 | 注册 2 handler → send count=2 → remove 1 → send count=1 | 数量正确 |
| 20 | send_clear_handlers |
清空后无法发送 | add → clear → send | 返回 -4 |
| 21 | send_zero_length |
零长度数据 | send(port, "x", 0) | 返回 0;handler 被调用 |
| 22 | send_null_data |
NULL 数据 | send(port, NULL, 0) | 返回 0;handler 被调用 |
6. 接收回调(1 个)
| # | 测试名 | 描述 | 步骤 | 预期 |
|---|---|---|---|---|
| 23 | recv_callbacks |
用户实现接收回调 | ① on_recv_rtcm(0, ...) ② on_recv_command(1, ...) |
各自触发,互不干扰 |
7. 能力元数据(2 个)
| # | 测试名 | 描述 | 步骤 | 预期 |
|---|---|---|---|---|
| 24 | send_cap_meta |
发送能力元数据 | 查 count / name / desc / 边界 | SEND 两组正确 |
| 25 | recv_cap_meta |
接收能力元数据 | 查 count / name / desc / 边界 | RECV 两组正确 |
8. 错误处理(2 个)
| # | 测试名 | 描述 | 步骤 | 预期 |
|---|---|---|---|---|
| 26 | error_invalid_port |
无效端口 | send_sensor(999/-1, ...) |
均返回 -2 |
| 27 | error_deleted_port |
已删除端口 | 创建→设好→删除→send | 返回 -2 |
覆盖矩阵
| 功能模块 | 用例数 | 主要验证点 |
|---|---|---|
| 未初始化 | 1 | send → -1 |
| 端口管理 | 4 | 创建/满容量/删除异常/默认状态 |
| send_type / recv_type | 6 | 设置/清除/独立/无效端口 |
| handler 增删 | 2 | 添加/移除/清空 |
| 发送触发 | 9 | 单播/多播/类型不匹配/无handler/无send_type/移除后/清空后/零长/NULL |
| 接收回调 | 1 | 用户实现覆盖弱符号 |
| 能力元数据 | 2 | SEND 与 RECV 两组独立查询 |
| 错误处理 | 2 | 无效端口/已删除端口 |
总计:27 个测试用例