2.2 测试用例的组成, 写法
CPPUTest 的测试用例非常简单, 首先定义一个 TEST_GROUP, 然后定义属于这个 TEST_GROUP 的 TEST.
需要注意的地方是:
1. 引用 CPPUTest 中的2个头文件
#include <CppUTest/CommandLineTestRunner.h>
#include <CppUTest/TestHarness.h>
2. 引用 C 头文件时, 需要使用 extern "C" {}
extern "C"
{
#include "sample.h"
}
下面的例子是测试 sample.c 中 ret_int 的代码.
构造了一个测试成功, 一个测试失败的例子
/* file: test.c */ #include <CppUTest/CommandLineTestRunner.h> #include <CppUTest/TestHarness.h> extern "C" { #include "sample.h" } /* 定义个 TEST_GROUP, 名称为 sample */ TEST_GROUP(sample) {}; /* 定义一个属于 TEST_GROUP 的 TEST, 名称为 ret_int_success */ TEST(sample, ret_int_success) { int sum = ret_int(1, 2); CHECK_EQUAL(sum, 3); } /* 定义一个属于 TEST_GROUP 的 TEST, 名称为 ret_int_failed */ TEST(sample, ret_int_failed) { int sum = ret_int(1, 2); CHECK_EQUAL(sum, 4); } int main(int argc, char *argv[]) { CommandLineTestRunner::RunAllTests(argc, argv); return 0; } |
2.3 测试用例结果判断 ( fail, 各种assert等等)
测试完成后, 可以用 CPPUTest 提供的宏来判断测试结果是否和预期一致.
CPPUTest 提供的用于判断的宏如下: (上面的测试代码就使用了 CHECK_EQUAL)
2.4 运行测试用例时的编译选项配置 (主要是C语言相关的)
这一步是最关键的, 也就是编译出单元测试文件. 下面是 makefile 的写法, 关键位置加了注释.
# makefile for sample cpputest CPPUTEST_HOME = /home/wangyubin/Downloads/cpputest-3.6 CC := gcc CFLAGS := -g -Wall CFLAGS += -std=c99 CFLAGS += -D CPPUTEST # 编译测试文件时, 忽略sample.c的main函数, sample.c的代码中用了宏CPPUTEST # CPPUTest 是C++写的, 所以用 g++ 来编译 测试文件 CPP := g++ CPPFLAGS := -g -Wall CPPFLAGS += -I$(CPPUTEST_HOME)/include LDFLAGS := -L$(CPPUTEST_HOME)/lib -lCppUTest sample: sample.o sample.o: sample.h sample.c $(CC) -c -o sample.o sample.c $(CFLAGS) # 追加的测试程序编译 test: test.o sample.o $(CPP) -o $@ test.o sample.o $(LDFLAGS) test.o: sample.h test.c $(CPP) -c -o test.o test.c $(CPPFLAGS) .PHONY: clean clean: @echo "clean..." rm -f test sample rm -f sample.o test.o |
编译测试文件
make test <-- 会生成一个文件名为 test 可执行文件
编译sample程序时, 需要把 "CFLAGS += -D CPPUTEST" 这句注释掉, 否则没有main函数.