file.h
int func(int);
file.cpp
static int call();
static void print(int x);
int func(int) {
int val = call();
print(val);
}
Здесь статические функции объявлены и определены в одном файле file.cpp. Я не включил определение статических функций здесь.
Сейчас использую GMock Мне нужно смоделировать или проверить все функции, определенные в .h и .cpp.
Поскольку эти две функции скрыты, у вас нет возможности проверить их, кроме как вызвать func
функция.
Это означает, что вы не можете высмеивать вызовы функций «вызов» и «печать».
Единственным способом было бы как-то показать эти две функции или, по крайней мере, изменить способ их вызова.
Если вы создадите переменные обратного вызова функции в своем заголовке и будете вызывать их вместо реальных функций, то вы можете высмеивать эти вызовы. Как то так (не проверено):
file.h
typedef void call();
namespace hidden{
extern call callCb;
}
int func(int);
file.cpp
namespace{
void call(){
//do stuff
}
}
namespace hidden{
call callCb=::call;
}
int func(int){
hidden::callCb();
// do things
}
Единственный ответ, который я могу дать, это один из GMocks FAQ:
Мой код вызывает статическую / глобальную функцию. Могу ли я высмеивать это?
Вы можете, но вам нужно внести некоторые изменения.
В общем, если вам нужно смоделировать статическую функцию, это признак того, что ваши модули слишком тесно связаны (и менее гибки, менее пригодны для повторного использования, менее тестируемы и т. Д.). Возможно, вам лучше определить небольшой интерфейс и вызвать функцию через этот интерфейс, который затем можно легко смоделировать. Сначала это немного работы, но обычно окупается быстро.
Этот блог тестирования Google сообщение говорит это превосходно. Проверьте это.