You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Windows系统的Keil中为已有项目集成CPPUTest?

在Windows Keil中集成CPPUTest测试现有项目的分步指南

1. 编译CPPUTest ARM静态库

CPPUTest没有现成适配Keil的预编译库,得自己编译对应ARM架构的版本:

  • 下载CPPUTest源码,解压到本地路径(比如D:\cpputest)
  • 打开Keil,新建空ARM项目,选择和你现有项目一致的芯片型号
  • 将CPPUTest源码src/CppUTest、src/CppUTestExt下所有.cpp和.h文件添加到新项目中
  • 配置编译选项:
    • 开启C支持(Options → C/C → 编译器选择ARMCC C++)
    • 将D:\cpputest\src添加到头文件包含路径
    • 优化等级设为O0(防止测试逻辑被编译器优化)
    • 关闭无关组件(如RTOS),只保留核心库代码
  • 编译项目,生成cpputest.lib静态库,保存到D:\cpputest\lib目录

2. 改造现有Keil项目

  • 打开你的现成项目,右键项目→Manage→Project Items,新增名为Tests的分组
  • 将编译好的cpputest.lib添加到Tests分组中
  • 在项目的头文件包含路径里加入D:\cpputest\src
  • 开启项目的C支持:如果原项目是纯C代码,需要给C头文件加上extern "C"包裹,避免C名称 mangling问题
  • 链接配置:确保cpputest.lib被加入链接列表(可在Options→Linker→Misc Controls中添加--library=cpputest.lib)

3. 编写测试用例

在Tests分组下新建.cpp文件(比如test_my_module.cpp),示例代码如下:

#include "CppUTest/TestHarness.h"
// 引入被测模块的C头文件,必须用extern "C"包裹
extern "C" {
#include "my_module.h"
}

// 定义测试组,统一处理测试前后的初始化/清理
TEST_GROUP(MyModuleTests) {
    void setup() {
        // 测试前初始化,比如重置模块状态、初始化变量
    }
    void teardown() {
        // 测试后清理,比如释放资源
    }
};

// 具体测试用例:验证求和函数逻辑
TEST(MyModuleTests, CalculateSumReturnsCorrectValue) {
    int result = calculate_sum(15, 25);
    CHECK_EQUAL(40, result);
}

4. 配置测试入口

  • 新建main.cpp文件,如果原有项目的main是嵌入式运行入口,用条件编译区分测试和生产版本:
#ifdef RUN_TESTS
#include "CppUTest/CommandLineTestRunner.h"
int main(int argc, char** argv) {
    return CommandLineTestRunner::RunAllTests(argc, argv);
}
#else
// 原嵌入式项目的main函数
int main(void) {
    // ... 原有嵌入式初始化及业务代码
}
#endif
  • 在项目编译宏定义中添加RUN_TESTS(Options→C/C++→Define),编译测试版本时自动启用CPPUTest的入口函数

5. 运行测试

  • 编译项目,确保无编译错误
  • 启动Keil调试器(选择对应硬件调试工具如J-Link,或用QEMU模拟ARM环境),运行程序后,测试结果会输出到Debug Console窗口
  • 如果是无硬件依赖的纯逻辑模块,也可以尝试编译为Windows本地可执行文件,直接运行查看控制台输出的测试结果

6. 实用测试技巧

  • 常用断言:CHECK(布尔值检查)、CHECK_EQUAL(数值相等校验)、STRCMP_EQUAL(字符串相等校验),覆盖大部分基础测试场景
  • 利用setup()和teardown()处理通用的初始化和清理逻辑,减少测试代码重复
  • 测试失败时,控制台会输出具体的失败位置、预期值和实际值,直接定位问题点
  • 可通过命令行参数过滤测试,比如--group MyModuleTests只运行指定测试组的用例

内容的提问来源于stack exchange,提问作者Kanthi Deep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:35:14