我正在使用cmocka在我的C-项目上做一些单元测试,我想知道如何处理静态执行程序。
静态元素对我来说是:
因此,让函数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.cfoo.c -Icmocka来编译单元测试了。
现在有两个问题:
main.c访问,因此链接器将在构建过程中停止。fut_test_2会失败。如何用这些静态元素来处理这些问题?
发布于 2017-02-10 09:36:15
基于@LPs的评论和我自己的想法,我想总结一下可能的解决方案:
关于问题的--一个函数声明为静态:
bar.c包含到#include "foo.c"驱动的测试驱动main.c中。fut_test_2和fut_test_2可以放置到bar.c中,后者既包含测试中的fut,又包含测试中的fut和测试。然后,通过将声明添加到foo.h,可以访问这些测试:
extern int foo(int someVar);extern void fut_test_1(void **state);extern void fut_test_2(void **state);关于静态变量问题的:
https://stackoverflow.com/questions/42138037
复制相似问题