【问题标题】:How to setup a cmocka example with arm-none-eabi-gcc + cmake?如何使用 arm-none-eabi-gcc + cmake 设置 cmocka 示例?
【发布时间】:2023-04-05 00:15:01
【问题描述】:

我正在为基于 stm32f4xx 的系统开发固件。 为此,我基于 ARM 和 cmake 形式的 arm-none-eabi-gcc 工具链设置了一个工具链。 该工具链适用于 Ubuntu。我可以 x 编译和调试(通过 openocd + eclipse IDE)。 现在我想为我的代码添加一些功能测试。我正在检查,似乎 cmocka 是用于嵌入式软件测试的好工具。

我现在正在寻找将测试集成到 cmake 构建中的示例/模板。

让我们假设 myfunc.c 中有一个简单的函数

#include "myFunc.h"

int buffer[10];

void myFunc(int i, int val) {
    buffer[i] = val;
}

如果我做对了,我可以在单独的 c 文件中进行测试,例如“test.c”

#include "myFunc.h"
#include <cmocka.h>

// function success
static void test_myFunc_positive() {
    for(int i = 0; i < 10; i++) {
        myFunc(i,i);
    }
}

static void test_myFunc_outofbounds() {
    myFunc(100,44);
}


int main(void) {
    const struct CMUnitTest tests[] = {
        cmocka_unit_test(test_myFunc_positive),
        cmocka_unit_test(test_myFunc_outofbounds),
    };
    return cmocka_run_group_tests(tests, NULL, NULL);
}

通常我会跑步

cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE="cmake/STM32Toolchain.cmake"

我的问题包含一些子问题: 1.) 我安装了 libcmocka-dev。这是针对我的主机系统的。我需要为 arm-none-eabi-gcc 编译器安装 cmocka 吗? 2.) 如何设置 cmake 来选择 cmocka 库,构建测试并在主机系统上运行它?认为我的工具链文件需要被忽略。

【问题讨论】:

  • 我觉得target不需要运行cmoka,我们一般用cmoka写一个a.c和一个对应的a_test.c,这个单元测试只运行在host上
  • 你说得对。没有必要。但通常很难分离测试代码以使其可在主机上编译。所以目标测试是一个严肃的场景。

标签: c testing cmake cmocka gnu-arm


【解决方案1】:

您的源代码看起来不错。这是一个如何使用 cmocka 的食谱。 我也建议交叉编译cmocka's source code。事实上,我是这样做的:

  1. cmocka.c 添加到您的来源
  2. 将 'cmocka.h 和 cmocka_pbc.hcmocka_private.h 添加到您的包含目录中。
  3. 编译并运行您的软件

PS:我不知道 libcmocka-dev。我认为这是 cmocka 的预编译版本?

PPS:我在将 cmocka 的输出重定向到我的串行 UART 时遇到了一些麻烦。如果您有同样的问题,请随时提问。

【讨论】:

    猜你喜欢
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 2019-07-26
    • 2020-07-16
    • 1970-01-01
    相关资源
    最近更新 更多