问题标签 [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 投票
1 回答
30 浏览

c - set_target_properties 不适用于多个 --wrap 函数

++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++

==================================================== =============

我试图让 cmocka 单元测试工作,但由于某种原因,链接器不接受多个 --wrap 链接器标志。我在 stackoverflow 的另一篇文章中看到有人这样做。我在win10上使用由MSYS2项目构建的gcc 10.3.0版本。

0 投票
0 回答
61 浏览

c - 在 Eclipse 中集成库会阻止调试 exe 按预期运行

我正在尝试在 Eclipse 中使用 cmocka 单元测试框架建立一个 C 项目。使用以下软件:

  • 视窗 10
  • gcc 9.2.0
  • cmocka 1.1.0
  • Eclipse 光盘 4.22.0

我在 Eclipse 中创建了一个新的默认 Hello World ANSI C 项目,名为“cmocka_test”。它编译,它是可调试的,并打印到控制台。

然后,我通过执行以下操作扩展项目以包含 cmocka 库:

  1. 我将 cmocka-1.1.0-mingw.zip ( https://cmocka.org/files/1.1/ ) 的内容提取到项目文件夹中
  2. 我将“包含”路径添加到项目Properties -> C/C++ Build -> Settings -> G CC C Compiler -> Includes
  3. 我将“lib”路径添加到项目Properties -> C/C++ Build -> Settings -> MinGW C Linker -> Libraries -> Library search path和“cmocka”到 -> Libraries -> Libraries (-l)
  4. 修改代码以包含一个简单的 cmocka 测试用例:

它编译得很好,这是控制台输出:

但是,调试/运行无法按预期工作。在 Eclipse 中单击调试符号不会让我进入 main() 函数的开头。它不会停在我设置的断点处。它不会向控制台写入“Hello”,也不会通知失败的测试用例。没有控制台输出,没有问题或警告。我只是立即 <terminated, exit value: 0> gdb (7.6.1) 在调试视图中获得信息。在调试器控制台(我以前从未使用过)中:

我在这里想念什么?


每个用户busybee的请求,这里是makefile中的gcc命令:

结果是一样的。

0 投票
1 回答
120 浏览

c - 如果返回值结构有太多成员,则包装函数指针参数会更改

我编译以下main.c内容gcc main.c -Wl,--wrap=foo -lcmocka

我得到以下输出:

但是如果我添加一个新成员bazExampleStruct

我得到以下输出:

如果我不使用包装函数,一切似乎都按预期工作。

更多细节

我正在使用 GNU ld 版本 2.27-44 运行 gcc 4.8.5

问题

为什么添加另一个成员会ExampleStruct导致分段错误?为什么在复制到's 参数bar时会改变值?__wrap_foo

0 投票
1 回答
29 浏览

c - Cmocka - 我们是否应该为每个测试创建一个可执行文件来隔离静态变量?

失败

给定以下 cmocka 测试,其中包含依赖项中的静态变量:

main.c

dependency.h

dependency.c

(编译gcc main.c dependency.c -lcmocka并运行)

我得到以下输出:

这是因为incrementer不是在每次测试之间“重置”。

这只是一个证明观点的最小示例。实际上,我的依赖深入到我在测试中调用的代码中。

让它工作的替代方案

但是,如果我将每个测试分成自己的可执行文件和自己的测试组,我就可以incrementer按照预期为每个测试重新设置。

问题

  • 是唯一用 cmocka 实现测试隔离将每个测试分离成自己的可执行文件的吗?

当我发现这种情况发生时,我很震惊。我是 C 和 C 测试的新手,我一直认为测试隔离是单元测试框架的关键部分。对我来说,为什么甚至会有测试组开始是没有意义的,因为大多数时候您将测试具有依赖关系的代码,其中在某处使用静态变量,因此每个测试都会生成一个可执行文件。