搭建C语言单元测试开发环境:实现构建时自动运行测试
搭建C语言单元测试自动运行环境的通用步骤
1. 选个易上手的单元测试框架
挑轻量无依赖的就行,比如Unity(纯C实现,直接把它的头文件和源文件丢进项目目录就能用),或者Check。先以Unity为例,把框架文件放到项目的vendor/目录下。
2. 规整项目结构
把业务代码和测试代码分开,避免混乱:
src/:存放你的生产代码(比如math.c、math.h)tests/:存放测试用例代码(比如test_math.c)vendor/:放测试框架的代码
3. 写第一个测试用例
在tests/test_math.c里写个简单的测试,比如测试加法功能:
#include "unity.h" #include "../src/math.h" void test_addition(void) { TEST_ASSERT_EQUAL(5, add(2, 3)); } int main(void) { UNITY_BEGIN(); RUN_TEST(test_addition); return UNITY_END(); }
4. 编写Makefile
创建一个Makefile,让构建时自动编译并运行测试。下面是基础模板:
# 编译器和编译参数 CC = gcc CFLAGS = -Wall -Wextra -I./src -I./vendor # 生产代码相关 SRC_FILES = src/math.c OBJ_FILES = $(SRC_FILES:.c=.o) # 测试代码相关 TEST_SRC = tests/test_math.c TEST_OBJ = $(TEST_SRC:.c=.o) TEST_FRAMEWORK = vendor/unity.c # 默认执行目标:编译生产代码 + 运行测试 all: build run-tests # 编译生产代码 build: $(OBJ_FILES) $(CC) $(CFLAGS) -o my_program $(OBJ_FILES) # 编译测试程序 test-program: $(TEST_OBJ) $(OBJ_FILES) $(CC) $(CFLAGS) -o test_runner $(TEST_OBJ) $(OBJ_FILES) $(TEST_FRAMEWORK) # 运行测试并清理临时文件 run-tests: test-program ./test_runner rm -f test_runner $(TEST_OBJ) # 清理所有生成文件 clean: rm -f my_program $(OBJ_FILES)
5. 验证自动运行
在终端输入make,会自动完成:编译业务代码 → 编译测试程序 → 运行测试并输出结果。如果测试失败,make会直接终止并提示错误。
6. 适配TDD流程
以后按TDD模式开发时,先写失败的测试用例,运行make看到测试失败,再修改业务代码,直到make运行测试通过,重复这个循环即可。
内容的提问来源于stack exchange,提问作者mrs15
相关产品推荐
相关产品推荐

