Пересмешивающие статические функции, объявленные и определенные в .cpp без файла класса, используя GMOCK

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.

2

Решение

Поскольку эти две функции скрыты, у вас нет возможности проверить их, кроме как вызвать 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
}
1

Другие решения

Единственный ответ, который я могу дать, это один из GMocks FAQ:

Мой код вызывает статическую / глобальную функцию. Могу ли я высмеивать это?

Вы можете, но вам нужно внести некоторые изменения.

В общем, если вам нужно смоделировать статическую функцию, это признак того, что ваши модули слишком тесно связаны (и менее гибки, менее пригодны для повторного использования, менее тестируемы и т. Д.). Возможно, вам лучше определить небольшой интерфейс и вызвать функцию через этот интерфейс, который затем можно легко смоделировать. Сначала это немного работы, но обычно окупается быстро.

Этот блог тестирования Google сообщение говорит это превосходно. Проверьте это.

4

По вопросам рекламы [email protected]