首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >消除模拟文件依赖关系

消除模拟文件依赖关系
EN

Stack Overflow用户
提问于 2018-03-29 10:56:56
回答 1查看 94关注 0票数 0

我们正在模仿我们的代码,但是我们很难消除被模仿的文件所包含的其他文件的依赖性,因为模仿的头文件包括原始的头文件,而原始的头文件包括其他几个文件。我们得到的错误如下:

代码语言:javascript
运行
复制
In file included from ../nRF5_SDK_11.0.0_89a8197/components/softdevice/s130/headers/ble_gap.h:48:0,
                from ../nRF5_SDK_11.0.0_89a8197/components/softdevice/s130/headers/ble.h:52,
                from ../infrastructure/microcontroller_abstraction/ble/include/ble_service.h:4,
                from ../infrastructure/system_abstraction/pressure/include/pressure_service.h:15,
                from ./mocks/pressure_service_mock.h:5,
                from ./mocks/pressure_service_mock.c:7:
../nRF5_SDK_11.0.0_89a8197/components/softdevice/s130/headers/ble_gap.h: In function 'sd_ble_gap_address_set':
../nRF5_SDK_11.0.0_89a8197/components/softdevice/s130/headers/nrf_svc.h:66:5: error: unknown register name 'r0' in 'asm'
    __asm(                                              \
    ^

这是由于以下示例场景:让我们取一个示例文件压力服务mock.c例如mock.c - includes -> mock.h由于mock.h是生成的,所以它包含pressure_service.h,因为我们包含pressure_service.h,所以它尝试包含ble_service.h,然后向上包含原始SDK的c文件,但必须包含头文件

我们如何阻止Cmock包含pressure_service.h?

请协助我相信这是一个通用的问题,这是为什么一个人会使用CMOCK的全部目的,但我们似乎找不到解决方案。

EN

回答 1

Stack Overflow用户

发布于 2018-06-08 15:26:15

简短的回答:

AFAIK对于CMOCK来说,没有任何选项可以删除被模拟的C模块的任何includes。只能指定其他包含项。

根据include目录的结构,您可以尝试用原始头的精简副本替换阻碍性的头(在本例中为pressure_service.h),这会将任何额外的依赖性降至最低。

长长的答案:

我想你在这里面临的不是CMOCK的一般问题,而是你试图模拟的模块的设计问题。这是一个tried and tested practice,一个C模块的头文件应该只包含更多的头文件,这是这个模块的公共接口所需要的。典型的依赖关系是类型定义,用于接口函数的参数和/或返回值。由于模拟模块意味着提供指定接口的假实现,因此CMOCK需要将所有原始的包含内容复制到模拟实现中,以便使其进行编译。

这个问题通常可以通过减少原始头(被模仿的头)的依赖来解决,这通常会带来更好的软件架构。但是,如果要模拟的模块来自第三方库,这通常是无法实现的。在这种情况下,一种解决方法是复制原始头,并将其剥离为单元测试所需的最低功能。当然,这意味着,对原始界面的任何更改都需要在以后手动转移到精简副本。然而,如果有一个稳定的第三方模块,这应该不是一个大问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49547298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档