我需要启动并运行 Cmocka 单元测试框架。我的设置是:
src/math/addition/add.c (+add.h)
int add(int a, int b) {return a + b;}
src/数学/减法/sub.c (+sub.h)
int sub(int a, int b) {return a - b;}
生成文件
VPATH := src src/math src/math/addition
CFLAGS += -Isrc -Isrc/math -Isrc/math/addition
all: libMath clean
libMath: add.o sub.o
ar rcs bin/libMath add.o sub.o
clean:
rm -rf *.o
%.o: %.c %.h
单元测试
测试/数学/加法/add_test.c
#include "../src/math/addition/add.h"
void test_add() {
assert(add(4, 5), 9);
}
测试/数学/减法/sub_test.c
#include "../src/math/subtraction/sub.h"
void test_sub() {
assert(sub(9, 5), 4);
}
test/math/addition/add_test.c(来自cmocka.org)
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>
/* A test case that does nothing and succeeds. */
static void null_test_success(void **state) {
(void) state; /* unused */
}
int main(void) {
const struct CMUnitTest tests[] = {
cmocka_unit_test(null_test_success),
};
return cmocka_run_group_tests(tests, NULL, NULL);
}
我是 C 单元测试的新手,基本上无法设置单元测试,包括链接 Cmocka 库等。
我的想法是拥有多个单元测试文件,而不是将所有单元测试放在一个文件中。
根据 Clearer 的回答进行编辑
扩大
从 1 个测试文件到 2 个和 3 个,它将至少有 10+ 个文件。寻找一些优化和表达方式以很好地扩展并易于管理。这是我到目前为止所做的。
VPATH := src/math/add src/math/sub src/math/mul # split src/test path
VPATH += test/math/add test/math/sub test/math/mul
all: libMath clean
libMath: add.o sub.o mul.o
ar rcs bin/libMath add.o sub.o mul.o # suggestion? $^
test: add_test sub_test mul_test clean
./add_test
./sub_test
./mul_test
add_test: add_test.o add.o
$(CC) -o $@ $^
sub_test: sub_test.o sub.o
$(CC) -o $@ $^
mul_test: mul_test.o mul.o
$(CC) -o $@ $^
clean:
$(RM) *.o
%.o: %.c %.h
这是到目前为止的观察结果。
- 该模式似乎就像为每对测试和 src 文件添加一个新目标。
- 在先决条件和命令中将 .o 对象添加到 libMath
test:
在先决条件和命令中的目标下添加测试可执行文件
在扩大规模的同时,这种方式更好还是有更好的方法?
PS我已经删除了 CFLAGS 线,没有它它工作正常,帮助我清理并减少一些混乱。可以吗?如果 .h 文件的路径不正确,我的 IDE (clion) 会显示红色的摆动线,因此我在测试文件中使用完整路径来包含 src 文件。
PPS它在项目的根目录上创建测试可执行文件,如何在 bin 文件夹中创建所有二进制文件,然后在项目结束时全部删除。