问题标签 [cmockery]
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.
gcc - 编译 cmockery.c 时,如何解决 GCC“错误:从 'SourceLocation*' 转换为 'int' 失去精度”错误?
我需要使用Cmockery将单元测试添加到用作手工制作的 Makefile 的现有构建环境中。所以我需要弄清楚如何构建 cmockery.c(没有 automake)。
当我运行时:
我得到一长串这样的错误:
这是 cmockery.c 的第 247:248 行:
assert_true
在 cmockery.h 的第 154 行定义:
所以问题(如错误状态)是GCC不喜欢从'SourceLocation *'到'int'的转换。
./configure
我可以使用and构建 Cmockery make
(在 Linux上,如果我首先在 Mac OS X 上export CFLAGS=-I/usr/include/malloc
),没有任何错误。我尝试查看运行时编译 cmockery.c 的命令行make
(之后./configure
):
...但我没有看到任何可能解决此错误的选项。
在“错误:从 'void*' 转换为 'int' 失去精度”中,我看到我可以将(int)
cmockery.h 更改为(intptr_t)
. 我已经确认这是有效的。./configure
但是由于我可以使用and构建 Cmockery make
,因此必须有一种方法可以在不修改源代码的情况下构建它。
c++ - 如何编译 C++ 代码并将其与已编译的 C 代码链接?
我希望能够使用Cmockery来模拟从我正在测试的 C++ 代码调用的 C 函数。作为朝着这个方向迈出的一步,我将 Cmockery 示例run_tests.c重命名为 run_tests.cpp,并尝试编译并将其与 cmockery.c 链接:
前两个命令行(编译)是成功的,但在最后一个之后我得到:
该未定义符号来自 run_tests.cpp 的第 29 行:
run_tests() 函数在 cmockery.c 中定义。
在阅读了“ Linking C++ code with 'gcc' (without g++) ”之后,我尝试了:
但得到了相同的结果:
如何编译和链接 C++ 代码以便在 C 代码中找到符号?
c++ - 从 C++ 调用 C 函数时,如何告诉 gcc 放宽对类型转换的限制?
我正在尝试使用Cmockery来模拟从 C++ 代码调用的 C 函数。因为 SUT 使用 C++,所以我的测试需要使用 C++。
当我像这样使用 Cmockery expect_string() 宏时:
我得到:
我在cmockery.h中看到了 expect_string 的定义:
这是 _expect_string 的原型(来自 cmockery.h):
我认为问题在于我将 C 代码编译为 C++,因此 C++ 编译器反对(void*)string
将 expect_string_count 宏作为const char* string
参数传递给 _expect_string() 函数。
我已经extern "C"
在 my_tests.cpp 中使用了 cmockery.h ,如下所示:
...为了解决名称修改问题。(请参阅“如何编译和链接 C++ 代码与已编译的 C 代码? ”)
是否有命令行选项或其他方式告诉 g++ 如何放宽对从我的测试的 C++ 代码到 cmockery.c 中的 C 函数的类型转换的限制?
这是我目前用来构建 my_tests.cpp 的命令:
c - CMockery 模拟,重复符号错误
我遇到了 CMockery 模拟的问题,即出现重复符号警告。
代码的实现很长,所以它在 Gist here中。
Gist 包括测试 ( .c
)、实现 ( .c
) 和头文件,项目使用 构建CMake
和测试CTest
,使用CMockery
.
实际错误是:
我能够想出的解决方法是声明char *wit_configuration_file_path()
为static
. 由于实现与int wit_load_configuration(wit_configuration config)
我预期的实现在同一个文件中,因此它实际上可以干净地编译和链接。不幸的是,并且可能作为声明为静态的副作用wit_configuration_file_path()
,它从不使用模拟。
cmockery的谷歌示例太做作了,没有解释应该如何处理这个问题。
将函数声明为 not as 也可能更智能,更容易测试:
而是:
在这种情况下,我不需要模拟或存根任何东西;但我相信问题会回来咬我,因为我预计将来我需要模拟一些东西(否则怎么能写出全面的单元测试?)
1:我应该如何正确地做到这一点,这static
意味着它从不使用我的模拟,在没有static
导致重复符号错误的情况下声明它。
2:我应该改变我的 API 的设计吗?它适用于这种情况,但我想知道如何正确模拟函数。
3:将我的测试与我的整个库链接起来是不是一个错误,我正在使用 CMake,target_link_libraries(libwatcheditTest watchedit)
我的测试中的CMakeLists.txt
.
c - 我如何在我的项目中使用 cmockery
我一直在寻找一种使用 c 代码创建模拟对象的方法,直到我偶然发现了 cmockery。对我来说,它似乎是最好的模拟软件,因为它没有很多依赖项。
我在 ubuntu 工作并从https://code.google.com/p/cmockery/downloads/list下载了 tarball cmockery
我运行了 ./configure、make 和 make install。
我能够执行给定的示例,但我无法弄清楚如何让它在我自己的项目中运行。我查看了 configure 和 makefile 以尝试找出他们是如何做到的,但这没有成功。我认为这是导致我的问题的链接。
cmockery 的文件可以在以下位置找到:
我尝试将示例文件calculator.c 和calculator_test.c 复制到一个单独的目录并在那里编译它们。这就是我所做的:
在最后一步,我得到了很多未定义的对特定于 cmockery 的所有函数的引用和错误:
我想我把链接器搞砸了,但我找不到任何地方应该如何正确地完成它。
c - 在 cmocka 中临时启用和禁用功能包装的正确方法?
我正在使用cmocka库来测试一些嵌入式 c 代码。根据文档,我使用__wrap_
前缀来模拟函数,这样我就可以隔离我的单元测试。但是,一旦我这样做了,对函数的所有调用都将永远转到包装函数。如何在某些情况下重新启用实际功能,以便我可以对其进行测试或允许其他功能使用它?在我看来,唯一的方法是使用全局字段作为开关来调用真正的函数,如下所示:
这是正确的方法吗?
c - Cmocka - 错误:没有符号条目
我刚开始使用 Cmocka,我已经在这个问题上停留了一段时间。我有一个正在尝试构建的 cmocka 项目。当我尝试使用“make”时,我看到了错误。
[ 错误 ] --- 没有符号 __wrap_i2c_read 的条目。
此外,我在调用的行的 mock_i2c.c 文件中看到错误mock()
无法获得模拟函数 __wrap_i2c_read 的值。
现在我只是想模拟一个真/假值来让它工作。所以我的模拟看起来像
我在我的测试中检查了我正在打电话will_return(__wrap_i2c_read, true);
在我的 Makefile 中,LDFLAGS += -Wl,--wrap=i2c_read
我已经cmocka.h
包含在 mock_i2c.c 文件中。
对于这个模拟函数,这似乎不是一个问题,因为如果我不使用它,我会在该文件中的其他模拟函数中得到相同的错误。我不确定还需要什么其他信息,请告诉我。有人知道这是什么意思/以前见过吗?
谢谢。
编辑:所以我想我已经弄清楚为什么会出现这个错误。我正在测试的函数中有一个for
循环。从这个函数调用模拟函数。一旦我删除循环,错误就会消失。这可能与will_return
模拟值如何/何时排队有关吗?for
循环阻碍了?
Edit2:好的,看来我只是没有排队足够的模拟值。
c - 检查用 CMockery 测试的函数是否调用另一个特定函数
我在使用 CMockery 为如下所示的函数编写模拟代码时遇到问题。你能给我一些提示吗?我想测试是否startCalCompute
被调用并为 赋值updateMode
,使其不等于SYSTEM_CAL_CONFIG
。我需要的只是一个起点或提示。
foo.c
testfoo.c
c - 使用 Cmockery 验证函数指针是否相等
我正在编写单元测试,想知道如何使用 Cmockery 测试函数指针。
交流电
测试A.c
在运行时我收到错误,我不知道如何解决这个问题。可能是我使用了错误的 API 来断言,但不知道该调用哪一个。
以下是我的错误:
cmake - CMockery 编译未知类型名称“jmp_buf”
我正在尝试将单元测试框架 cMockery 添加到我的 C 项目中。我已将 cMockery 下载并安装到全局包含路径中。但是#include <cmockery.h>
在我的源文件中之后,cmake 抛出了以下问题。如果我也使用它,似乎会抛出同样的东西cMocka
。我错过了一些包裹吗?
编辑:谷歌搜索"/usr/include/google/cmockery.h:365:8: error: unknown type name ‘jmp_buf’"
正好返回0 个结果(现在 1 个结果指向这个问题)。以及搜索unknown type name 'jmp_buf'
只解释它是什么。不是如何修复它或为什么它会在 cmockery 中发生。
操作系统:Manjaro Archlinux
Cmake、make、gcc、g++ 全部安装。
我CMakeList.txt
的也很标准,只有一个 c 源代码
我想知道如何解决这个问题以编译我的代码。