问题标签 [cmocka]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2044 浏览

c - 在 cmocka 中临时启用和禁用功能包装的正确方法?

我正在使用cmocka库来测试一些嵌入式 c 代码。根据文档,我使用__wrap_前缀来模拟函数,这样我就可以隔离我的单元测试。但是,一旦我这样做了,对函数的所有调用都将永远转到包装函数。如何在某些情况下重新启用实际功能,以便我可以对其进行测试或允许其他功能使用它?在我看来,唯一的方法是使用全局字段作为开关来调用真正的函数,如下所示:

这是正确的方法吗?

0 投票
1 回答
3409 浏览

c - 运行示例 CMocka 测试时“未定义对 `_cmocka_run_group_tests' 的引用”

我安装了CMocka 测试框架并尝试了示例代码

但是当我尝试编译时,出现以下错误:

我错过了什么?

0 投票
2 回答
1035 浏览

c - cmocka 自由操作和捕获异常

我从cmocka库开始了我的冒险,我有两个问题。

  1. 是否可以确定 free() 操作是否正确?我的意思是,我想测试清理树结构的功能。我读过有关 test_free() 的内容,但老实说,我不明白这背后的想法。

  2. 第二件事是捕获标准库异常的情况。我知道 function expect_assert_failure,但是如何使用它呢?例如,我想做一些会引发分段错误的事情,但我还是想通过测试。

0 投票
1 回答
1158 浏览

c - 安装 cmocka 时如何处理 Mac OS X 上的 RPATH 问题?

我正在尝试cmocka在 Mac OSX Yosemite 10.10.3 上安装和运行用于单元测试的库,但我的RPATH设置存在一些问题。

更新:

感谢@baf,我能够cmocka.h像这样手动包含在我的 CMakeLists.txt 中:

但是,为什么我必须手动进行呢?


我已经尝试了许多不同的安装方式:

到目前为止我所做的:

  1. 从这里下载 cmocka:这里。1.0 版。

  2. tar xvf cmocka-1.0.1.tar.xz

  3. cd cmocka-1.0.1,mkdir buildcd build

  4. sudo cmake ..
    我在这里收到这样的消息:

-- 配置完成

CMake 警告(开发):

未设置策略 CMP0042:MACOSX_RPATH 默认启用。运行“cmake --help-policy CMP0042”以获取策略详细信息。使用 cmake_policy 命令设置策略并禁止显示此警告。

未为以下目标指定 MACOSX_RPATH:

cmocka_shared

此警告适用于项目开发人员。使用 -Wno-dev 来抑制它。

问题#1:如何设置,rpath以便没有像上面那样的警告?

  1. 须藤make

  2. 须藤make install

  3. cmocka现在应该安装了吧?


cmake为我正在使用cmocka库的程序运行。

所以现在我运行cmake我的程序,我的主CMakeList.txt文件有这样的行:

但是在这个阶段警告没有出现,所以我相信它find_libarary(CMOCKA cmocka)已经成功地定位cmocka在我的电脑上。

为我的程序运行make

运行时make出现如下错误:

所以估计cmocka是找不到了...

问题 #2:为什么cmocka找不到库?


补充笔记:

  1. 我试过跑步

    /li>

但它没有帮助。我想这是 Linux 的解决方案,而不是 Mac。

  1. 我试图从他们的官方文档中了解RAPTH有关 Mac 的信息:http: //www.cmake.org/Wiki/CMake_RPATH_handling。但是我了解的很少,我无法为我的问题提出解决方案。cmake

  2. 我试过安装cmockausingbrew但我得到了相同的结果。

  3. 此外,我在 SO 上阅读了很多关于RPATH、链接和的问题cmocka,但我也找不到合适的解决方案。不过,这里是相关线程的列表:

  4. 我跑了otool -L cmocka。这是我得到的:

0 投票
3 回答
2083 浏览

c - How to mock function in C when its caller function is defined in same file?

I am trying to mock a function in C, mocking works fine when the function and its caller function are defined in different files. But when both functions (function itself and its caller) are defined in the same file, the mocked function does not get invoked.


Case 1 :


Case 2 :


Code compilation command : gcc -Wl,--wrap=func test.c file.c

In case 2, mocking function is not being invoked. I am looking for a solution where I can mock function even caller and called function are in same file.

0 投票
5 回答
1384 浏览

c - Cmocka 测试不显示任何输出

我已经下载了cmocka 示例文件并按照所有说明进行操作。所有测试文件均已成功生成,我可以运行它们,但控制台中没有输出。我尝试改变CMOCKA_MESSAGE_OUTPUT环境变量,尝试编写自己的测试并编译它们,尝试重新编译并重新安装 cmocka 几次 - 没有任何东西使测试输出任何东西。我在 Windows 7 32 位上工作,所以我想尝试一下 cygwin,但 cygwin 只是抛出它找不到公共库,所以我放弃了我的研究的这个分支——毕竟 cmocka 也应该在 windows cmd 中正常工作。有谁知道如何让测试输出任何东西到控制台?

编辑

我正在添加我的 make 信息以防编译/链接出现问题,尽管我没有看到任何问题(它不会产生任何错误并正确输出 tests.exe 文件):

生成文件

注意1:cflags 中的众多路径是出于绝望 - 起初我只使用第一个。

注意 2:当我尝试在 Netbeans 或 cygwin 中运行此脚本时,我更改delrm -f并切换斜杠。输出与上面描述的一样:make 完成时没有任何错误并输出tests.exe,但是一旦执行,它就会抛出关于无法找到公共库的错误。

0 投票
2 回答
3014 浏览

c++ - 如何获取 JUnit 格式的 CMocka 报告?

我可以使用 cmocka 并在屏幕上获得默认结果。我想以 JUnit 格式获取单元测试的结果。

CMocka 通过使用 env 变量CMOCKA_MESSAGE_OUTPUT或使用 API来支持 JUnit 格式cmocka_set_message_output(CM_OUTPUT_XML);

但仍然没有生成 xml 文件。任何人都可以帮助获得 JUnit 格式的结果吗?

0 投票
1 回答
1050 浏览

c - CMOCKA / Linker:“包装”很多功能

我最近遇到了 C 的“ cmocka ”模拟库。我能够模拟单个函数并成功测试调用函数。现在我需要将它用于我正在处理的项目中,在该项目中需要模拟大量函数。如何将我想要模拟的所有函数传递给 Linker 的 'wrap' 参数?是否可以将函数的名称存储在文件中,以便可以在链接器中获取它?

0 投票
1 回答
5307 浏览

c - 如何与 cmocka 链接?

我在 Ubuntu 下使用 Eclipse。

我刚刚安装了 cmocka:

当我构建一个简单的测试项目时,我得到了链接器错误。从这段代码

我收到这些错误:

所以,看来我应该将 cmocka 库添加到链接器路径中。但后来我得到

我使用 libcmocka.so.0.3.1、libcmocka.so.0 和 libcmocka.so 得到相同的结果

显然,我做错了一些非常基本的事情,但是什么?

0 投票
1 回答
720 浏览

c - Visual Studio C链接器包装选项?

从这篇文章Unit testing with mock objects in C

这是通过使用--wrap链接器选项来完成的,该选项将包装函数的名称作为参数。如果测试是使用 gcc 编译的,则调用可能如下所示:

$ gcc -g -Wl,--wrap=chef_cook waiter_test.c chef.c

在 Visual Studio 中编译 C 项目时如何执行此操作?