关于测试函数的使用
1 目的:
为了让大家了解测试函数的使用方法,本文详细介绍了测试函数的选择编译(链接)的方法。
2 目录结构:
组版服务器组的代码目录结构(初定):
├─Service_001
│ ├─code
│ ├─testcode
│ └─make
└─Service_002
├─code
├─make
└─testcode
说明:
Ø 以服务为单位创建服务目录(如Service_001,这个命名待以后定)
Ø 每个服务目录下有3个子目录:code testcode make
n Code:保存程序代码(真代码),如:a.h、a.c;
n Testcode:保存测试代码(假代码),如:a_t.c;
n Make:保存Makefile文件和编译/链接后的可执行文件。
Ø 服务目录下有一个FuncMacro.h文件,作用是通过定义宏选择测试函数。这个需要手工修改,并且每次增加函数都要在这个文件里添加宏,里面的宏都是以注释形式出现的,当修改时需要使用哪个只需要去掉注释即可。这个文件代码如下:
FuncMacro.h:
#ifndef FUNCMACRO_H
#define FUNCMACRO_H
// #define ADDSUB_ADD // add 正常(完成)
// #define ADDSUB_SUB // sub 正常(未完成)
// #define ADDSUB_SUB0_T // sub 返回0
// #define ADDSUB_SUB2_T // sub 返回2
#endif
3 实现思想:
这个实现的核心思想就是通过C语言的#ifdef预处理宏,具体如下:
在code目录下有a.h和a.c描述加减法的代码,但减法代码还没有完成,代码如下:
a.h:
// Service: AddSub
#ifndef AAAAA_H
#define AAAAA_H
int add(int a, int b);
int sub(int a, int b);
#endif
a.c:
#include “FuncMacro.h” // 选择测试函数的宏定义头文件
#ifdef ADDSUB_ADD
int add(int a, int b)
{
return (a + b);
}
#endif
#ifdef ADDSUB_SUB
int sub(int a, int b)
{
// TODO:
}
#endif
在testcode目录下有a_t.c的测试代码(假代码),为了实现没有完成的sub功能,我们让它返回0,同时另一个返回2。
a_t.c:
#include “FuncMacro.h” // 选择测试函数的宏定义头文件
#ifdef ADDSUB_SUB0_T
int sub(int a, int b)
{
return 0;
}
#endif
#ifdef ADDSUB_SUB2_T
int sub(int a, int b)
{
return 2;
}
#endif
好了,下面我们开始选择需要的测试函数,比如我们选a.c里的add和a_t.c里面的返回0那个sub函数。
我们的FuncMacro.h文件可以这样改:
#ifndef FUNCMACRO_H
#define FUNCMACRO_H
#define ADDSUB_ADD // add 正常(完成)
// #define ADDSUB_SUB // sub 正常(未完成)
#define ADDSUB_SUB0_T // sub 返回0
// #define ADDSUB_SUB2_T // sub 返回2
#endif
4 扩展:
可以通过在a_t.c中增加同一个函数的不同版本实现多个测试用例效果。