C 单元测试运行配置
我需要启动并运行Cmocka单元测试框架。我的设置是: src/math/addition/add.c(+add.h) src/math/减法/sub.c(+sub.h) MakefileC 单元测试运行配置,c,unit-testing,cmocka,C,Unit Testing,Cmocka,我需要启动并运行Cmocka单元测试框架。我的设置是: src/math/addition/add.c(+add.h) src/math/减法/sub.c(+sub.h) Makefile 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.
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
单元测试
test/math/addition/add\u test.c
#include "../src/math/addition/add.h"
void test_add() {
assert(add(4, 5), 9);
}
#include "../src/math/subtraction/sub.h"
void test_sub() {
assert(sub(9, 5), 4);
}
test/math/减法/sub_test.c
#include "../src/math/addition/add.h"
void test_add() {
assert(add(4, 5), 9);
}
#include "../src/math/subtraction/sub.h"
void test_sub() {
assert(sub(9, 5), 4);
}
测试/math/addition/add_test.c(来自)
以下是迄今为止的观察结果
test:
target下添加测试可执行文件p.p.S它在项目根目录上创建测试可执行文件,如何在bin文件夹中创建所有二进制文件,然后在项目结束时删除所有文件。我将添加一个
测试目标。该目标将取决于您的所有测试程序,然后应执行这些程序;您可能希望添加单独的目标来执行程序,并且只保留一个主测试目标以确保所有目标都已执行。每个测试程序将取决于测试所需的目标文件;如果您正在进行加法测试,那么让加法测试依赖于addition.o和add_test.o。像往常一样链接它们,然后执行它们
例如:
test: addition_test
./addition_test
addition_test: add_test.o add.o
$(CC) -o $@ $^
比例测试
您可以通过添加两个规则并删除与测试相关的大多数其他规则来扩展测试:
test: add_test_run sub_test_run
%_run: %
./$<
%_test: %.o %_test.o
$(CC) -o $@ $^
您应该在干净的目标中使用$(RM)
而不是RM-rf
<代码>$(RM)
与平台无关,而RM-rf
仅在UNIXy平台上工作。我将添加一个测试目标。该目标将取决于您的所有测试程序,然后应执行这些程序;您可能希望添加单独的目标来执行程序,并且只保留一个主测试目标以确保所有目标都已执行。每个测试程序将取决于测试所需的目标文件;如果您正在进行加法测试,那么让加法测试依赖于addition.o和add_test.o。像往常一样链接它们,然后执行它们
例如:
test: addition_test
./addition_test
addition_test: add_test.o add.o
$(CC) -o $@ $^
比例测试
您可以通过添加两个规则并删除与测试相关的大多数其他规则来扩展测试:
test: add_test_run sub_test_run
%_run: %
./$<
%_test: %.o %_test.o
$(CC) -o $@ $^
您应该在干净的目标中使用$(RM)
而不是RM-rf
<代码>$(RM)
与平台无关,而RM-rf
仅在UNIXy平台上工作。单元测试代码的生成文件在哪里?你到底有什么问题?我没有,但是谢谢你的提示,你也能帮我吗?你可以将测试规则简化为%\u test:%\u test.o%.o
+$(CC)-o$@$^
,并删除每个显式规则。然后只需将每个新测试添加到测试目标。单元测试代码的make文件在哪里?你到底有什么问题?我没有,但是谢谢你的提示,你也能帮我吗?你可以将测试规则简化为%\u test:%\u test.o%.o
+$(CC)-o$@$^
,并删除每个显式规则。然后,只需将每个新测试添加到测试
目标。嗨@clear,首先感谢你让我启动并运行Make文件,我在最后两个答案上取得了很大进步,我正在实现这一目标。我已经根据你的答案用我当前的设置编辑了我的问题,现在有3个源文件,每个源文件都有自己的测试文件。此库将由10个或更多文件组成,请查看。到目前为止我很喜欢它,我不介意随着我的进步增加更多的目标,但只是为了防止任何必要的表达?再次感谢。请把我的新Make文件放在你的回答中编辑一些错误/@newline'/bin/sh:-c:0行:/@早上有点太早了。再试一次,没问题。我想我必须回到原来的方式,因为在我的实际实现中,一个测试有两个prequisite.o文件,所以我想我必须分别对待每一个文件。Hi@Clear,首先感谢你让我启动并运行Make文件,我在最后两个答案上取得了很大的进步,我已经做到了。我已经根据你的答案用我当前的设置编辑了我的问题,现在有3个源文件,每个源文件都有自己的测试文件。此库将由10个或更多文件组成,请查看。到目前为止我很喜欢它,我不介意随着我的进步增加更多的目标,但只是为了防止任何必要的表达?再次感谢。请把我的新Make文件放在你的回答中编辑一些错误/@newline'/bin/sh:-c:0行:/@早上有点太早了。再试一次,没问题。我想我必须回到老方法,因为在我的实际实现中,一个测试有两个prequisite.o文件,所以我想我必须分别对待每一个文件。
test: add_test.log sub_test.log
%.log: %
./$^ > $@
%_test: %.o %_test.o
$(CC) -o $@ $^