问题标签 [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.

0 投票
1 回答
502 浏览

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,我什至不确定我是否可以

任何想法都会很棒..谢谢。

0 投票
2 回答
1628 浏览

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 吗?

0 投票
1 回答
1933 浏览

c - ARM STM32 的 Ceedling CMock 设置

我一直在为 STM32 设置 Ceedling。howto 非常稀缺,到目前为止,我几乎没有用谷歌搜索过。幸运的是,该框架的大小相对透明。是 PIC 配置。我设置了类似的东西(project.yml):

到目前为止一切顺利(尚未尝试实际工作)。添加了这个定义

我有一个警告:

难怪,nextPC 平台的 64 位指针也是如此。我仍然不确定我是否必须控制CMOCK_MEM_PTR_AS_INT。这取决于是否CMOCK_MEM_PTR_AS_INT是关键目标 (ARM) 平台定义。

到目前为止,我还没有找到 STM32 示例。

0 投票
1 回答
108 浏览

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 的全部目的,但我们似乎无法找到解决方案。

0 投票
1 回答
1732 浏览

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.

似乎无法识别函数调用..任何帮助将不胜感激!利亚德

0 投票
0 回答
66 浏览

c - 在较大函数的“提取方法”重构后测试静态函数

我有一个很大的功能,如下所示:

我已经重构了代码,提取了一个方法,如下:

现在,我想对这个功能进行单元测试。

我可以很容易地测试processMsg,因为它是从 公开可用的.h,并且我已经完成了必要的测试来检查结构初始化和解析是否正确。

问题在于测试processMsgRegister内部功能。我想单独测试它,而不必每次都测试所有processMsg外部函数,因为我必须将测试与所有 msg 处理回调、期望等混为一谈,因为它已经被自己测试过了。


经过一些评论,我认为最好的方法是将这些方法移动到一个新的class,使它们public在那里,但不发布该类,因此它可以独立于其他方法进行测试。

所以我现在的问题是:

  • 如何在 中实施这种方法plain C

从代码组织的角度(分割成多个文件等)和有用的编译器/链接器标志的角度来看,这个问题都是。

我的设置:gcc、cmake、unity、cmock

0 投票
1 回答
544 浏览

c - __attribute__((weak) ) 函数导致未定义的引用

我目前正在尝试设置 CMock 以使用 MinGW 和 CMake 对 STM32 进行单元测试。在我的配置文件中,我设置了 :weak: 选项,这样生成的模拟就会给我弱功能。一个例子是:

但是,当我编译时,它给了我对 HAL_TIM_IC_Init 错误的未定义引用。

如果我删除weak属性,那么它不会给我未定义的引用错误。但是因为我需要重写HAL层提供的一些函数,所以需要将mocked库设为weak,否则会出现多个定义错误。

所以我的问题是为什么弱属性会导致未定义的引用错误,我该如何解决?

0 投票
1 回答
404 浏览

c - 一般单元测试:可以模拟自我功能吗?(ceedling/CMock)

主要可以模拟要测试的文件的功能吗?

例如,我想测试包含这些函数的文件 self_test.c:

测试文件主要如下所示:

并完成 self_test.h 文件:

当我这样做时,编译器返回:“错误:函数 function_1。调用次数超出预期。”

我想这是不好的做法,可能不起作用,但由于我的 function_2 相当大,这可以为我节省大量工作,因为我可以独立于 function_2 测试 function_1。而且我正在处理遗留代码,因此不幸的是,用更好的测试界面重写所有内容不是一种选择。

最高输出:

0 投票
2 回答
1892 浏览

unit-testing - 如何使用 Ceedling/Unity/Cmock 测试嵌入式系统

我是测试嵌入式系统的新手。我想知道在学习如何使用 ceedling 方面是否有一个好的起点。

我正在开发的项目是用于 CubeSat 项目的嵌入式系统,我们需要一种方法来测试我们的代码。

0 投票
2 回答
657 浏览

cmock - Ceedling/CMock:如何使 .h 文件的某些部分仅对 Cmock 可见

在我的模块中有宏之类的功能。这对于模块测试来说不是障碍,但对于包含该模块的其他模块来说却是障碍。

我的问题:有没有办法让 .h 文件的一部分仅对 CMock 可见?

例如:

这是我更喜欢的方式。但是我应该在哪里定义 MODULE_TEST_CMOCK?我无法在 Project.yml 中定义它,因为通过此更改,我对 Module_1 的模块测试将失败。但另一方面,在我对 Module_2 的模块测试中,它需要 Module_1.h 的模拟版本,我不能指望 FunctionLikeMacro_1 和 FunctionLikeMacro_2 的调用。

感谢您的时间。:)