首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ceedling/ Cmock :如何使.h文件的某些部分仅对Cmock可见

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

Stack Overflow用户
提问于 2020-03-26 19:39:11
回答 2查看 534关注 0票数 1

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

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

例如:

代码语言:javascript
复制
Module_1.h:

#ifdef MODULE_TEST_CMOCK
    void FunctionLikeMacro_1(unsigned int x);
    unsigned int FunctionLikeMacro_2(void);
#else
    #define FunctionLikeMacro_1(x) (HWREGISTER_1 = (unsigned int)x)
    #define FunctionLikeMacro_2 ((unsigned int)HWREGISTER_2)
#endif

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

谢谢您抽时间见我。:)

EN

回答 2

Stack Overflow用户

发布于 2020-05-11 00:04:25

根据docs/CeedlingPacket.md的说法,您可以向要编译到project.yml:defines:部分的每个测试文件添加特定的定义

定义:通过配置的工具在测试和发布编译中使用的命令行定义

..。

<test_name>

添加指定的预处理器定义。例如:

:定义::test_foo_config:- FOO_SPECIFIC_FEATURE

因此,在您的示例中,您必须为所有想要在其中模拟Module_1.h的测试文件添加MODULE_TEST_CMOCKproject.yml中的:defines:部分。

我使用您的示例头文件和两个测试文件进行了尝试:直接包含Module_1.htest/test_module1.c和包含mock_Module_1.htest/test_module2.c。我将此添加到我的project.yml

代码语言:javascript
复制
:defines:
  :test_module2:
    - MODULE_TEST_CMOCK

这似乎运行得很好。我可以使用test/test_module2.c中的FunctionLikeMacro_2_IgnoreAndReturn(),测试行为与预期一致,而宏直接用于test/test_module1.c中的测试。

票数 0
EN

Stack Overflow用户

发布于 2020-05-15 04:01:48

当Ceedling编译和构建您的测试时,它使用定义测试集进行编译,因此您可以编写头文件,以便在编译测试时更改它们的性质。例如,如果您正在做嵌入式工作,并且您通过宏完成所有的寄存器I/O,那么您可以将其转换为用于单元测试的函数,然后只需模拟它们。

代码语言:javascript
复制
// my_reg_io.h

#ifndef TEST  // production code

#define WRITE_REG(add, val) *(add) = (val)
#define READ_REG(add)  *(add)

#else  // test code
// mockable prototypes
void _my_fake_write(void *add, int val);
int _my_fake_read(void *add);

#define WRITE_REG(add, val) _my_fake_write((add), (val))
#define READ_REG(add)  _my_fake_read(add)

#endif

在读取的情况下,您可以使用stub mock将行为注入到代码中,以测试硬件接口,而不需要硬件。非常有用。

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

https://stackoverflow.com/questions/60866393

复制
相关文章

相似问题

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