19.1 单元测试框架

在这里插入图片描述

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目录,建议结合具体平台代码阅读测试案例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arm精选

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值