我正在为基于 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 库、构建测试并在主机系统上运行它?认为我的工具链文件需要被忽略。
最佳答案
您的源代码看起来很不错。这是一个如何使用 cmocka 的方法。 我建议交叉编译 cmocka's source code , 也。事实上我是这样做的:
- 将
cmocka.c
添加到您的源代码中 - 将“cmocka.h 和
cmocka_pbc.h
和cmocka_private.h
添加到您的包含目录。 - 编译并运行你的软件
PS:我不知道 libcmocka-dev。我认为这是 cmocka 的预编译版本?
PPS:我在将 cmocka 的输出重定向到我的串行 UART 时遇到了一些问题。如果您遇到同样的问题,请随时提问。
关于c - 如何使用 arm-none-eabi-gcc + cmake 设置 cmocka 示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50879081/