消除模拟的文件依赖性



我们正在模拟代码,但是由于模拟的标头(包括原始标头(,我们遇到了消除其他文件的依赖性的困难,其中包括其他几个文件。我们要在下面遇到的错误:

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.H事实是,由于生成了模拟,它包括pressugh_service.h而且由于我们包括pressig_service.h,因此它试图包括ble_service.h然后提高层次结构原始SDK的C文件未编译但是必须包括标题文件

我们将如何阻止cmock包括supper_service.h?

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

简短答案:

afaik没有任何选择可以驳回模拟C模块的任何包含的内容。只能指定附加包括。

根据您的结构包括目录的结构,您可以尝试通过原始标头的剥离副本来替换阻塞性标头(pressure_service.h(,该副本将任何其他依赖项降低到最低。

长答案:

IMHO您在这里并不面对通用问题,而是您试图模拟的模块的设计问题。这是一种经过验证的实践,即C模块的标题应仅包括进一步的标头文件,这是该模块的 public 接口所需的。典型的依赖性是类型定义,用于接口函数的参数和/或返回值。由于嘲笑一个模块意味着提供指定接口的虚假实现,因此CMOCK 需要复制所有原始内容,其中包含在模拟实现中,以使其编译。

通常可以解决此问题,以减少原始标头的依赖关系(要嘲笑的标头(,这通常会导致一般的软件体系结构。如果要嘲笑的模块来自第三方库,那么这通常是无法实现的。在这种情况下,解决方法正在制作原始标头的副本,并将其剥离至单元测试所需的最低功能。当然,这意味着对原始接口的任何更改稍后都需要手动转移到脱衣副本。但是,如果有一个稳定的第三方模块,那不是一个大问题。

最新更新