# c_tdd **Repository Path**: gerryqd/c_tdd ## Basic Information - **Project Name**: c_tdd - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-22 - **Last Updated**: 2026-01-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # C语言TDD实战教程项目 一个全面、实战的教程,用于学习C语言中的测试驱动开发(TDD)。 ## 概述 本项目通过真实世界的示例,为C语言中的TDD提供实用的入门指导。您将学习如何使用Unity测试框架和行业标准的TDD实践来编写简洁、可维护的C代码。 ## 您将学到 - **TDD基础**: 红-绿-重构循环 - **Unity测试框架**: 在C语言中编写和运行测试 - **最佳实践**: 编写可测试的、模块化的C代码 - **真实示例**: 字符串操作、数据结构、算法 - **调试技巧**: 通过测试发现和修复bug ## 快速开始 ### 前置要求 - GCC (GNU C Compiler) - Make - Git ### 安装 ```bash # 克隆仓库 git clone cd c_tdd # 初始化Unity测试框架 git submodule update --init # 运行示例测试 make -C examples/01-string-length test ``` ### 预期输出 ``` test_str_length.c:41:test_empty_string_returns_zero:PASS test_str_length.c:42:test_single_character_returns_one:PASS test_str_length.c:43:test_normal_string_returns_length:PASS test_str_length.c:44:test_null_pointer_returns_negative_one:PASS ----------------------- 4 Tests 0 Failures 0 Ignored OK ``` ## 项目结构 ``` c_tdd/ ├── examples/ # 教程示例 │ ├── 01-string-length/ # 字符串长度计算器 │ ├── 02-stack/ # 栈数据结构 │ └── 03-dynamic-array/ # 动态数组 ├── lib/ │ └── unity/ # Unity测试框架 (submodule) ├── docs/ │ ├── tutorial.md # 完整TDD教程 │ └── api.md # Unity API参考 ├── Makefile # 根构建配置 └── README.md # 本文件 ``` ## 教程路径 我们建议按顺序学习这些示例: ### 1. [示例1: 字符串长度计算器](examples/01-string-length/README.md) **难度**: 初级 **时间**: 30分钟 通过实现一个简单的字符串长度函数来学习TDD基础知识。 **您将练习:** - 编写第一个测试 - 红-绿-重构循环 - 基本的Unity断言 - 增量开发 ### 2. 示例2: 栈数据结构 **难度**: 中级 **时间**: 45分钟 实现一个完整的栈数据结构及其操作。 **您将练习:** - 每个函数多个测试用例 - 边界情况处理 - 带测试覆盖的重构 - 集成测试 ### 3. 示例3: 动态数组 **难度**: 高级 **时间**: 60分钟 实现一个可自动扩展的动态数组。 **您将练习:** - 测试复杂数据结构 - 内存管理测试 - 性能考虑 - 高级测试模式 ## 构建示例 每个示例都有自己的Makefile: ```bash # 构建并运行测试 make -C examples/01-string-length test # 仅构建 make -C examples/01-string-length # 清理构建产物 make -C examples/01-string-length clean # 显示帮助 make -C examples/01-string-length help ``` ### 根Makefile 根Makefile提供统一的命令: ```bash # 测试所有示例 make test-all # 清理所有示例 make clean-all # 显示项目状态 make status ``` ## 文档 - **[完整教程](docs/tutorial.md)**: 全面的TDD指南 - **[示例1指南](examples/01-string-length/README.md)**: 字符串长度计算器 - **[Unity API](docs/api.md)**: 测试框架参考 ## 核心特性 ### 测试驱动开发工作流 每个示例都演示完整的TDD循环: 1. **红**: 编写一个失败的测试 2. **绿**: 实现最小代码使其通过 3. **重构**: 在保持测试通过的同时改进代码 ### 真实世界示例 您在实际C项目中会遇到的实际场景: - 字符串操作 - 内存管理 - 数据结构 - 错误处理 - 边界情况 ### 行业最佳实践 学习专业开发实践: - 描述性的测试名称 - 每个测试一个断言 - 测试独立性 - 持续测试 - 重构信心 ## 为什么在C中使用TDD? C语言提出了独特的挑战,使TDD特别有价值: - **手动内存管理**: 测试捕获内存泄漏和缓冲区溢出 - **指针复杂性**: 测试验证指针处理和边界情况 - **平台差异**: 测试确保跨系统的可移植性 - **遗留代码**: 测试为重构提供安全网 - **嵌入式系统**: 测试实现自信的硬件交互 ## 贡献 我们欢迎贡献!您可以帮助的领域: - 添加新示例 - 改进文档 - 修复bug - 分享您的TDD经验 - 翻译文档 ## 系统要求 ### 最低要求 - GCC 4.0或更高版本 - Make 3.81或更高版本 - POSIX兼容的shell ### 已测试平台 - Linux (Ubuntu 20.04+, Fedora 35+) - macOS (10.15+) - FreeBSD 12+ ## 故障排除 ### 构建错误 **问题**: `unity.h: No such file or directory` **解决方案**: 初始化Unity子模块: ```bash git submodule update --init ``` **问题**: 测试编译失败 **解决方案**: 确保已安装GCC和Make: ```bash gcc --version make --version ``` ### 测试失败 **问题**: 测试中出现段错误 **解决方案**: 在实现NULL检查之前这是预期的。请参阅教程获取指导。 ## 资源 ### 学习材料 - [完整教程](docs/tutorial.md) - [Unity框架文档](https://github.com/ThrowTheSwitch/Unity) - [嵌入式C的测试驱动开发](https://pragprog.com/titles/jgade/) ### 社区 - 报告问题: GitHub Issues - 讨论: GitHub Discussions - 拉取请求: 欢迎! ## 许可证 本项目在MIT许可证下授权 - 详见LICENSE文件。 ## 致谢 - **Unity框架**: 由ThrowTheSwitch.org提供 - **TDD社区**: 分享知识和最佳实践 - **C编程社区**: 数十年的创新 ## 作者 - 主要开发者: [您的名字] - 贡献者: [贡献者列表] --- **准备开始了吗?** 从[示例1: 字符串长度计算器](examples/01-string-length/README.md)开始,或阅读[完整教程](docs/tutorial.md)。 **TDD新手?** 查看[教程](docs/tutorial.md)了解测试驱动开发概念介绍。 **有TDD经验?** 直接跳到示例开始编码!