Допустим, я хочу иметь 2 модуля, которые слабо связаны. Первый модуль зависит от интерфейса другого модуля. Я хотел бы отделить их, введя определения для интерфейсов.
В module1_cfg.h
#define FUNC1_MODULE2(x) Func1_module2_impl(x)
В module1. c Я бы использовал это определение для доступа к другому модулю.
if(TRUE != FUNC1_MODULE2(arg))
{
//do something
}
В модуле 2. c тогда я бы реализовал эту функцию:
BOOL Func1_module2_impl(uint8_t i)
{
//do something
}
Эта стратегия развязки работает очень хорошо, пока я не хочу писать модульные тесты для модуля 1. Если я хочу написать свои модульные тесты с Hippomocks, они бы выглядели так:
void test_func1_module2_ok()
{
MockRepository mocks;
mocks.ExpectCallFunc(Func2_module2_impl).Return(TRUE);
...
}
Но теперь мои модульные тесты для module1 зависят от module2. Будет ли возможность использовать введенную функцию наподобие макроса (FUNC1_MODULE2) в модульном тесте, но с некоторыми макросами magi c пропустить скобку, чтобы я мог передать указатель на определенную функцию гиппопамамам? Я хотел бы придерживаться функции, подобной макросам, и избегать объектных макросов в реальном коде для переопределения функций, но использовал бы любые приемы, необходимые в модульном тесте, чтобы избавиться от скобок.
Спасибо за вашу помощь!