[SOP] 2025版嵌入式TDD环境搭建:MSYS2 + CppUTest (重焕《Test-Driven Development for Embedded C》新生)
一、 背景:经典与过时 (The Gap)
最近在研读 James Grenning 的经典著作 《Test-Driven Development for Embedded C》。书中的 TDD (测试驱动开发) 思想和双目标 (Dual-Targeting) 策略非常硬核,是解决嵌入式业务逻辑耦合的良药。
然而,书中的配套源码年代久远(十多年前),直接在现代的 CLion 或 Visual Studio 中打开全是报错,原本的 Makefile 也与现在的 GCC 版本不兼容。为了不被环境问题劝退,我基于 MSYS2 和社区维护的新版仓库,摸索出了一套 2025 年可用的构建方案。
核心目标: 在 Windows 上获得原生 Linux 般的构建体验,跑通书中的
LedDriver测试用例。
二、 工具链准备 (Prerequisites)
我们抛弃臃肿的 IDE 配置,回归最纯粹的命令行工具链。
1. 源码仓库 (Modern Fork)
不要使用书中的原始链接,推荐使用这个针对现代编译器修复过的版本:
- GitHub Repo: Mozilla88/tddcode
- 操作:
git clone到本地(例如D:\Dev_Workspace\Lab\tddcode)。
2. MSYS2 环境 ( The Environment)
Windows 下最推荐的类 Unix 环境。
- 下载: MSYS2 官网
- 安装: 一路下一步即可。
- 关键点: MSYS2 有很多 Shell 环境(Clang64, Mingw64 等),我们选择 MSYS2 UCRT64 (Universal C Runtime),兼容性最好。
三、 详细搭建步骤 (Step-by-Step)
以下所有命令均在 MSYS2 UCRT64 终端窗口中执行。
Step 1: 安装编译器 (GCC)
打开 UCRT64 终端,执行以下命令安装 GCC 工具链:
1 | pacman -S mingw-w64-ucrt-x86_64-gcc |
Step 2: 安装构建工具 (Make) —— [易错点]
仅安装 GCC 是不够的,书中的构建依赖 make。很多教程漏了这一步,导致报错 bash: make: command not found。
Bash
1 | pacman -S make |
(或者安装 pacman -S base-devel 以获取更完整的工具集)
Step 3: 编译 CppUTest 框架
我们需要从源码编译最新的 CppUTest,以确保与本地 GCC 版本兼容。
下载: 从 CppUTest 官网 或 GitHub 下载最新 Release 版本。
路径: 假设解压在
D:\Dev_Workspace\Lab\cpputest-3.8。编译: 在终端中切换路径并构建(注意 MSYS2 的路径格式):
Bash
1 | # 注意:Windows 的 D:\ 对应 MSYS2 的 /d/ |
如果最后看到 OK 字样,说明测试框架本身编译成功。
Step 4: 配置环境变量 (The Bridge)
书中的 Makefile 依赖 CPPUTEST_HOME 这个变量来找到测试框架。我们需要设置它。
永久生效方案: 将环境变量写入 .bashrc 配置文件:
Bash
1 | # 注意替换为你自己的实际路径,务必使用 Linux 风格的正斜杠 /d/... |
四、 见证奇迹 (The Moment of Truth)
一切准备就绪,回到我们 Clone 下来的书籍源码目录。
切换目录:
Bash
1
cd /d/Dev_Workspace/Lab/tddcode
运行测试: 书中的代码支持 Unity 和 CppUTest,这里我们使用功能更强大的 CppUTest:
Bash
1
make -i -f MakefileCppUTest.mk
🎉 成功输出
如果你看到类似下面的输出,恭喜你,你的 TDD 环境已经打通了!
Plaintext
1 | compiling LedDriverTest.cpp |
五、 常用命令速查 (Cheat Sheet)
为了方便后续练习,这里总结了几个高频命令:
运行 CppUTest 测试:
make -i -f MakefileCppUTest.mk清理构建 (Clean):
make -i -f MakefileCppUTest.mk clean运行 Unity 测试 (前几章):
make -i -f MakefileUnity.mk
Engineer’s Note: 虽然现在的 IDE (如 CLion) 也有 GoogleTest 插件,但手动搭建这一套环境能让你更理解 “Host-based Testing” 的底层原理:代码是如何脱离硬件,在 PC 的 GCC 中编译并链接到 Mock 库上的。这才是白盒思维的起点。
📢 懒人福利: > 我已经将配置好环境、剔除干扰项的纯净版练习脚手架上传到了 GitHub。你无需自己修改 Makefile,Clone 下来即可直接开始本书的 TDD 练习: > 👉 lleoeric/embedded-c-tdd-starter: A modern, clean-slate starter kit for James Grenning’s TDD book. MSYS2/GCC ready.