0

假设我想要 2 个松散耦合的模块。第一个模块依赖于另一个模块的接口。我想通过为接口引入定义来解耦它们。

在 module1_cfg.h

#define FUNC1_MODULE2(x) Func1_module2_impl(x)

在 module1.c 中,我将使用此定义来访问另一个模块。

if(TRUE != FUNC1_MODULE2(arg))
{
    //do something
}

在 module2.c 中,我将实现这个功能:

BOOL Func1_module2_impl(uint8_t i)
{
   //do something
}

这种解耦策略非常有效,直到我想为 module1 编写单元测试。如果我想用 Hippomocks 编写单元测试,它们看起来像这样:

void test_func1_module2_ok()
{ 
    MockRepository mocks;
    mocks.ExpectCallFunc(Func2_module2_impl).Return(TRUE);
    ...
}

但是现在我对 module1 的单元测试取决于 module2。是否有可能在单元测试中使用引入的函数,如宏(FUNC1_MODULE2),但有一些宏魔术省略括号,所以我可以将定义的函数指针传递给 hippomocks?我想坚持使用宏之类的功能并避免在真实代码中使用对象宏来重新定义函数,但会使用单元测试中必要的任何技巧来摆脱括号。

谢谢您的帮助!

4

0 回答 0