我正在使用cmocka在我的C-Project上做一些单元测试,我想知道如何处理静态多边形。如何使用cmocka处理静态元素?
静态元素对我来说:声明为static
- 功能被声明为static
因此,让功能fut
是我们的测试功能,并foo
成为其他功能。无论放置在文件bar.c
在:
static int fut(int add) {
static int sum = 0;
sum += add;
return sum;
}
int foo(int someVar){
//Some calculation on someVar...
someVar = someVar * 42;
//call subRoutine
return fut(someVar);
}
而让foo.h中是这样的:
extern int foo(int someVar);
所以让我们继续,我会说明问题。我想通过两个未通过测试来测试被测函数,这两个测试通过了一些随机值add
。该testroutines放在main.c中并期待这样的:
void fut_test_1(void **state) {
int ret;
ret = fut(15);
assert_int_equal(ret, 15);
ret = fut(21);
assert_int_equal(ret, 36);
}
void fut_test_2(void **state) {
int ret;
ret = fut(32);
assert_int_equal(ret, 32);
ret = fut(17);
assert_int_equal(ret, 49);
}
现在,我可以尝试的东西,如编译单元测试: GCC main.c中的foo.c -Icmocka
有现在两个问题:
声明为静态函数不能从
main.c
访问,所以链接器将在构建过程中停止。声明为静态的函数内部的变量不会在两次测试之间重置。所以
fut_test_2
将会失败。
如何用上述静态元素处理这些问题?
看看[这个SO问题](http://stackoverflow.com/questions/593414/how-to-test-a-static-function)关于点1.关于问题2我认为你是没有幸运:变量是静态的,所以你不能重置它,只要你不能修改函数来处理重置。 – LPs