当前位置: 首页 > news >正文

19.1 单元测试框架

目录

    • 19.1.1 TF-A测试体系概述
    • 19.1.2 测试环境搭建
      • 基础依赖
      • 编译测试套件
      • 测试执行示例
    • 19.1.3 核心测试框架解析
      • 测试用例结构
      • 常用断言宏
    • 19.1.4 典型测试场景实现
      • 1. SMC处理测试
      • 2. MMU配置测试
      • 3. 电源管理测试
    • 19.1.5 Mock框架使用
      • 硬件寄存器模拟
    • 19.1.6 测试覆盖率分析
      • 生成覆盖率报告
      • 覆盖率提升建议
    • 19.1.7 最佳实践

在这里插入图片描述

19.1.1 TF-A测试体系概述

ARM Trusted Firmware-A采用分层测试策略:

  • 单元测试:针对独立模块的隔离测试(本章重点)
  • 集成测试:验证组件间交互(见19.2节)
  • 系统级测试:完整启动链验证

测试框架特点:

  • 基于CppUTest(轻量级C/C++单元测试框架)
  • 支持模拟执行环境(Mock环境)
  • 与Jenkins CI系统集成

19.1.2 测试环境搭建

基础依赖

# 安装CppUTest
sudo apt-get install cpputest

编译测试套件

# 在TF-A根目录执行
make PLAT=fvp TEST_GROUP=unit-tests all

测试执行示例

./build/fvp/release/tests/unit/<test_binary>

19.1.3 核心测试框架解析

测试用例结构

#include <CppUTest/TestHarness.h>
#include "module_under_test.h"TEST_GROUP(TestGroupName) {void setup() { /* 初始化代码 */ }void teardown() { /* 清理代码 */ }
};TEST(TestGroupName, TestCaseName) {// 测试断言CHECK_EQUAL(expected, actual);
}

常用断言宏

宏类型示例说明
基本检查CHECK(condition)布尔条件检查
相等检查CHECK_EQUAL(a, b)值相等检查(不比较类型)
内存比较MEMCMP_EQUAL(a, b, len)内存区域比较
异常检查CHECK_THROWS(expr, exc)异常抛出检查

19.1.4 典型测试场景实现

1. SMC处理测试

TEST(SmcHandlerTests, ValidSmcCall) {smc_args_t args = {.fid = PSCI_CPU_ON};int ret = handle_smc(&args);CHECK_EQUAL(PSCI_SUCCESS, ret);
}

2. MMU配置测试

TEST(MmuTests, TranslationTableSetup) {mmu_context_t ctx;init_mmu_tables(&ctx);CHECK_TRUE(check_table_alignment(ctx.ttbr0));
}

3. 电源管理测试

TEST(PscsiTests, CpuSuspendValidation) {uint32_t power_state = make_psci_power_state(...);CHECK_EQUAL(0, validate_power_state(power_state));
}

19.1.5 Mock框架使用

硬件寄存器模拟

#include <CppUTestExt/MockSupport.h>// 测试代码中模拟寄存器读操作
uint32_t mock_read_reg(uint32_t addr) {return mock().actualCall("read_reg").withParameter("addr", addr).returnUnsignedIntValue();
}// 测试用例中设置预期行为
TEST(GpioTests, PinSetTest) {mock().expectOneCall("read_reg").withParameter("addr", GPIO_BASE).andReturnValue(0x0);gpio_set_pin(5);// 验证后续行为...
}

19.1.6 测试覆盖率分析

生成覆盖率报告

# 使用gcov和lcov
make PLAT=fvp COVERAGE=on tests
lcov --capture --directory ./ --output-file coverage.info
genhtml coverage.info --output-directory cov_report

覆盖率提升建议

  1. 边界条件测试(如空指针、非法参数)
  2. 错误路径测试(所有错误返回分支)
  3. 状态转换测试(特别是状态机模块)

19.1.7 最佳实践

  1. 测试隔离原则:每个测试用例应独立运行
  2. 测试可重复性:不依赖外部环境状态
  3. 失败信息明确:断言消息应包含足够调试信息
  4. 测试分级
    • Level 1:核心功能验证(必须通过)
    • Level 2:边界条件测试(release前必须通过)
    • Level 3:性能/压力测试(定期执行)

:TF-A的单元测试代码位于/tests/unit目录,建议结合具体平台代码阅读测试案例


文章转载自:
http://andalusia.jopebe.cn
http://admiral.jopebe.cn
http://cavity.jopebe.cn
http://bahai.jopebe.cn
http://antennary.jopebe.cn
http://calamitously.jopebe.cn
http://blague.jopebe.cn
http://alibi.jopebe.cn
http://analogically.jopebe.cn
http://ansi.jopebe.cn
http://blandly.jopebe.cn
http://appearance.jopebe.cn
http://carte.jopebe.cn
http://cavalcade.jopebe.cn
http://biologist.jopebe.cn
http://accurately.jopebe.cn
http://appetitive.jopebe.cn
http://aftermost.jopebe.cn
http://chazan.jopebe.cn
http://calefaction.jopebe.cn
http://chargehand.jopebe.cn
http://applewood.jopebe.cn
http://blackbody.jopebe.cn
http://affinity.jopebe.cn
http://astrologian.jopebe.cn
http://advect.jopebe.cn
http://awheel.jopebe.cn
http://basecourt.jopebe.cn
http://calypso.jopebe.cn
http://adjudicator.jopebe.cn
http://www.dtcms.com/a/281228.html

相关文章:

  • ssm学习笔记day08mybatis
  • ESP32轻松实现UDP无线通信
  • 使用python的pillow模块将图片转化为灰度图,获取值和修改值
  • 雷军的 IP 革命:人格化力量如何重塑商业规则|创客匠人
  • uniapp微信小程序弹窗
  • 《汇编语言:基于X86处理器》第8章 高级过程(1)
  • 被人工智能激活的哲学
  • 短剧小程序的「技术革命」:从「粗放生长」到「精准运营」
  • Windows内核对象
  • 新方法!家长可用安卓或苹果,远程管理孩子使用iPhone的时长
  • LeetCode|Day12|58. 最后一个单词的长度|Python刷题笔记
  • 跨平台游戏引擎 Axmol-2.7.1 发布
  • C#中Static关键字解析
  • k8s环境使用Operator部署Seaweedfs集群(上)
  • AJAX 入门到精通
  • 堆内存、栈内存、内存地址
  • 作业:复制数组
  • EndNote
  • 【Keil】C/C++混合编程的简单方法
  • DGNNet:基于双图神经网络的少样本故障诊断学习模型
  • 深入浅出 RabbitMQ-核心概念介绍与容器化部署
  • Element plus参考vben逻辑实现的描述列表组件封装实践
  • 【PTA数据结构 | C语言版】二叉树前序序列化
  • 差分信号接口选型指南:深入解析LVDS、SubLVDS、SLVDS与SLVDS-EC**
  • 《大数据技术原理与应用》实验报告五 熟悉 Hive 的基本操作
  • [AI8051U入门第三步]串口1使用-printf重定向(乱码解决办法)
  • Django+Celery 进阶:动态定时任务的添加、修改与智能调度实战
  • Android target34升级到35中的edge-to-edge适配
  • Nestjs框架: 数据库架构设计与 NestJS 多 ORM 动态数据库应用与连接池的配置
  • 利用android studio,对图片资源进行二次压缩