问题标签 [cmock]
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.
unit-testing - 使用 cmock 模拟作为 windows CALLBACK 的函数
我在创建一个 C 函数作为回调传递给另一个库的情况下遇到问题,因此它使用 CALLBACK 表示法。这是使用VS2015。
无效回调回调(无效)
我正在使用 unity 和 cmock 对一些代码进行单元测试,并且我正在尝试模拟回调..
因此,当 cmock 脚本创建所有模拟(模拟头文件)时,它会创建如下行:
void TheCallback_CMockIgnoreAndReturn(UNITY_LINE_TYPE cmock_line, VOID CALLBACK cmock_to_return);
(注意那里的CALLBACK这个词)
当我编译时,我会收到如下警告和错误:
警告 C4229:使用不合时宜:忽略数据的修饰符
错误 C2182:“cmock_to_return”:非法使用“void”类型
这似乎与卡在中间的 CALLBACK 有关。
关于如何将其声明为 CALLBACK 并且没有 VS2015 抱怨忽略并返回模拟的函数原型中的类型的任何想法?
我想知道在单元测试时是否需要以某种方式取消定义 CALLBACK,我什至不确定我是否可以
任何想法都会很棒..谢谢。
c - 在 CMock 中使用 ExpectWithArray 的示例
我在 Ubuntu 16.04 和 Eclipse 4.7.2 下使用 Ceedling。到目前为止,一切正常,但我无法使 _ExpectWithArray 模拟函数工作。
例如,我有以下需要模拟的功能void TestFunc(uint8_t * data);
。在我的测试文件中,我有以下调用
uint8_t TEST_DATA[5] = { 0xFF, 0x00, 0xA0, 0x00, 0x09 };
TestFunc_ExpectWithArray(TEST_DATA, 5)
我也尝试给出不同的值,param_depth
但没有运气。
当我尝试运行测试时,它总是失败
根据我的经验,当没有使用正确的参数调用要模拟的函数并且 CMock 无法生成模拟版本时,总是会发生这种情况。我究竟做错了什么?有人可以举例说明如何正确使用 _ExpectWithArray 吗?
c - ARM STM32 的 Ceedling CMock 设置
我一直在为 STM32 设置 Ceedling。howto 非常稀缺,到目前为止,我几乎没有用谷歌搜索过。幸运的是,该框架的大小相对透明。这是 PIC 配置。我设置了类似的东西(project.yml
):
到目前为止一切顺利(尚未尝试实际工作)。添加了这个定义
我有一个警告:
难怪,next
PC 平台的 64 位指针也是如此。我仍然不确定我是否必须控制CMOCK_MEM_PTR_AS_INT
。这取决于是否CMOCK_MEM_PTR_AS_INT
是关键目标 (ARM) 平台定义。
到目前为止,我还没有找到 STM32 示例。
unit-testing - 消除模拟文件依赖
我们正在模拟我们的代码,但是由于模拟的标头包括包含其他几个文件的原始标头,因此我们难以消除模拟文件包含的其他文件的依赖关系。我们得到的错误如下:
这是由于以下示例场景:让我们以示例文件压力服务mock.c为例,mock.c ----包括---> mock.h 事情是,既然生成了mock.h,它就是包括 pressure_service.h 并且由于我们包括 pressure_service.h ,它试图包括 ble_service.h 然后向上包含原始 SDK 的 c 文件的层次结构未编译,但必须包含头文件
我们如何阻止 Cmock 包含 pressure_service.h?
请协助我相信这是一个普遍的问题,这是人们使用 CMOCK 的全部目的,但我们似乎无法找到解决方案。
c - Cmock 无法识别函数调用
我是Cmock
一个模拟框架的新手C
,并试图开始使用它。我采用了 exmaples 目录中提供的“make_example”并对其进行了一些修改。我的代码出现在下面:
运行显示的测试时,我收到下一个错误:
FAIL:Function func_using_foo_init. Called more times than expected.
此外,如果我添加对 func_using_foo_init_ExpectAndReturn 的调用,我会收到下一个错误:
Function foo_init. Called less times than expected.
似乎无法识别函数调用..任何帮助将不胜感激!利亚德
c - 在较大函数的“提取方法”重构后测试静态函数
我有一个很大的功能,如下所示:
我已经重构了代码,提取了一个方法,如下:
现在,我想对这个功能进行单元测试。
我可以很容易地测试processMsg
,因为它是从 公开可用的.h
,并且我已经完成了必要的测试来检查结构初始化和解析是否正确。
问题在于测试processMsgRegister
内部功能。我想单独测试它,而不必每次都测试所有processMsg
外部函数,因为我必须将测试与所有 msg 处理回调、期望等混为一谈,因为它已经被自己测试过了。
经过一些评论,我认为最好的方法是将这些方法移动到一个新的class
,使它们public
在那里,但不发布该类,因此它可以独立于其他方法进行测试。
所以我现在的问题是:
- 如何在 中实施这种方法
plain C
?
从代码组织的角度(分割成多个文件等)和有用的编译器/链接器标志的角度来看,这个问题都是。
我的设置:gcc、cmake、unity、cmock
c - __attribute__((weak) ) 函数导致未定义的引用
我目前正在尝试设置 CMock 以使用 MinGW 和 CMake 对 STM32 进行单元测试。在我的配置文件中,我设置了 :weak: 选项,这样生成的模拟就会给我弱功能。一个例子是:
但是,当我编译时,它给了我对 HAL_TIM_IC_Init 错误的未定义引用。
如果我删除weak
属性,那么它不会给我未定义的引用错误。但是因为我需要重写HAL层提供的一些函数,所以需要将mocked库设为weak,否则会出现多个定义错误。
所以我的问题是为什么弱属性会导致未定义的引用错误,我该如何解决?
c - 一般单元测试:可以模拟自我功能吗?(ceedling/CMock)
主要可以模拟要测试的文件的功能吗?
例如,我想测试包含这些函数的文件 self_test.c:
测试文件主要如下所示:
并完成 self_test.h 文件:
当我这样做时,编译器返回:“错误:函数 function_1。调用次数超出预期。”
我想这是不好的做法,可能不起作用,但由于我的 function_2 相当大,这可以为我节省大量工作,因为我可以独立于 function_2 测试 function_1。而且我正在处理遗留代码,因此不幸的是,用更好的测试界面重写所有内容不是一种选择。
最高输出:
unit-testing - 如何使用 Ceedling/Unity/Cmock 测试嵌入式系统
我是测试嵌入式系统的新手。我想知道在学习如何使用 ceedling 方面是否有一个好的起点。
我正在开发的项目是用于 CubeSat 项目的嵌入式系统,我们需要一种方法来测试我们的代码。
cmock - Ceedling/CMock:如何使 .h 文件的某些部分仅对 Cmock 可见
在我的模块中有宏之类的功能。这对于模块测试来说不是障碍,但对于包含该模块的其他模块来说却是障碍。
我的问题:有没有办法让 .h 文件的一部分仅对 CMock 可见?
例如:
这是我更喜欢的方式。但是我应该在哪里定义 MODULE_TEST_CMOCK?我无法在 Project.yml 中定义它,因为通过此更改,我对 Module_1 的模块测试将失败。但另一方面,在我对 Module_2 的模块测试中,它需要 Module_1.h 的模拟版本,我不能指望 FunctionLikeMacro_1 和 FunctionLikeMacro_2 的调用。
感谢您的时间。:)