问题标签 [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.
c - set_target_properties 不适用于多个 --wrap 函数
++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++
==================================================== =============
我试图让 cmocka 单元测试工作,但由于某种原因,链接器不接受多个 --wrap 链接器标志。我在 stackoverflow 的另一篇文章中看到有人这样做。我在win10上使用由MSYS2项目构建的gcc 10.3.0版本。
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 库:
- 我将 cmocka-1.1.0-mingw.zip ( https://cmocka.org/files/1.1/ ) 的内容提取到项目文件夹中
- 我将“包含”路径添加到项目Properties -> C/C++ Build -> Settings -> G CC C Compiler -> Includes
- 我将“lib”路径添加到项目Properties -> C/C++ Build -> Settings -> MinGW C Linker -> Libraries -> Library search path和“cmocka”到 -> Libraries -> Libraries (-l)
- 修改代码以包含一个简单的 cmocka 测试用例:
它编译得很好,这是控制台输出:
但是,调试/运行无法按预期工作。在 Eclipse 中单击调试符号不会让我进入 main() 函数的开头。它不会停在我设置的断点处。它不会向控制台写入“Hello”,也不会通知失败的测试用例。没有控制台输出,没有问题或警告。我只是立即
<terminated, exit value: 0> gdb (7.6.1)
在调试视图中获得信息。在调试器控制台(我以前从未使用过)中:
我在这里想念什么?
每个用户busybee的请求,这里是makefile中的gcc命令:
结果是一样的。
c - 如果返回值结构有太多成员,则包装函数指针参数会更改
我编译以下main.c
内容gcc main.c -Wl,--wrap=foo -lcmocka
:
我得到以下输出:
但是如果我添加一个新成员baz
到ExampleStruct
:
我得到以下输出:
如果我不使用包装函数,一切似乎都按预期工作。
更多细节
我正在使用 GNU ld 版本 2.27-44 运行 gcc 4.8.5
问题
为什么添加另一个成员会ExampleStruct
导致分段错误?为什么在复制到's 参数bar
时会改变值?__wrap_foo
c - Cmocka - 我们是否应该为每个测试创建一个可执行文件来隔离静态变量?
失败
给定以下 cmocka 测试,其中包含依赖项中的静态变量:
main.c
dependency.h
dependency.c
(编译gcc main.c dependency.c -lcmocka
并运行)
我得到以下输出:
这是因为incrementer
不是在每次测试之间“重置”。
这只是一个证明观点的最小示例。实际上,我的依赖深入到我在测试中调用的代码中。
让它工作的替代方案
但是,如果我将每个测试分成自己的可执行文件和自己的测试组,我就可以incrementer
按照预期为每个测试重新设置。
问题
- 是唯一用 cmocka 实现测试隔离将每个测试分离成自己的可执行文件的吗?
当我发现这种情况发生时,我很震惊。我是 C 和 C 测试的新手,我一直认为测试隔离是单元测试框架的关键部分。对我来说,为什么甚至会有测试组开始是没有意义的,因为大多数时候您将测试具有依赖关系的代码,其中在某处使用静态变量,因此每个测试都会生成一个可执行文件。