C 单元测试运行配置

C 单元测试运行配置,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.

我需要启动并运行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.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(来自)

以下是迄今为止的观察结果

  • 这种模式似乎像是为每两个目标添加一个新的目标 测试和src文件
  • 在前提条件和命令中将.o对象添加到libMath
  • 在先决条件和命令中的
    test:
    target下添加测试可执行文件
  • 在扩大规模的同时,这种方式更好还是有更好的方法

    p.S.我已经移除了CFLAGS线路,没有它它它工作得很好,帮助我清理和减少了一些杂物。可以吗?如果路径对.h文件不正确,我的IDE(clion)会显示红色的摇摆线,因此我在测试文件中使用完整路径来包含src文件


    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 $@ $^