本文介绍google的C代码单元测试框架Cmockery ,根据官方介绍,Cmockery是一个用于简化C应用程序单元测试代码的轻量级库。
A lightweight library to simplify and generalize the process of writing unit tests for C applications.
源码连接
Cmockery 测试与 Cmockery 库、标准 C 库和被测试的模块链接,被编译成独立的可执行文件。尽管代码的实际目标运行环境与测试环境有所差别,单元测试依然是有效的,因为单元测试是在功能逻辑级别的验证,没有必要和目标运行环境一样。
如果不做一些修改可能无法将模块编译成测试应用程序,因此在编译Cmockery单元测试程序时,应该做一些宏定义,以便进行条件编译。
windows下编译:
> vsvars.bat
> cd windows
> nmake
在windows cmd中执行以上命令,本文中使用visual studio2017,nmake是visual studio的命令,需要在环境变量中配置visual studio,在cmd中执行VsDevCmd.bat文件即可。
?成功之后在windows目录下会生成cmockery.lib库文件和对应的.h文件,将库和.h文件添加到我们的测试工程中,就可以开始进行单元测试啦。
示例使用被测代码如下:
int add_user(int a, int b)
{
return a + b;
}
int sub_user(int a, int b)
{
return a - b;
}
测试代码如下:
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include "cmockery.h"
/* Ensure add() adds two integers correctly. */
void test_add(void **state) {
assert_int_equal(add_user(3, 3), 6);
assert_int_equal(add_user(3, -3), 0);
}
/* Ensure sub() subtracts two integers correctly.*/
void test_sub(void **state) {
assert_int_equal(sub_user(3, 3), 0);
assert_int_equal(sub_user(3, -3), 6);
}
int main(int argc, char *argv[])
{
const UnitTest tests[] = {
unit_test(test_add),
unit_test(test_sub),
};
return run_tests(tests);
}
运行测试工程,输出测试结果:
test_add: Starting test
test_add: Test completed successfully.
test_sub: Starting test
test_sub: Test completed successfully.
All 2 tests passed
请按任意键继续. . .
|