2015-08-19 3 views
0

У меня есть файл C, содержащий некоторые статические функции, как использовать тест Google для проверки этих статических функций?Как проверить статические функции C с помощью теста google

заголовок файла:

test.h 
int accessData(); 

исходный файл:

test.c 
static int value; 
static int getData() 
{ 
    return value; 
} 

int accessData() 
{ 
    if(value != 0) 
    { 
     return getData(); 
    } 
    return 0; 
} 

статическая функция вызывается глобальная функция, но как проверить эти статические функции с помощью теста Google?

+0

'# include' исходный файл вместо файла заголовка. – Groo

ответ

1

Один из способов достижения этого - #include исходный файл C в ваш тестовый источник. Тогда функция static является частью одного и того же блока перевода в качестве тестового кода, и может быть вызвана из него:

#include "test.c" 

/* here follow the tests of getData() */ 

Недостатком является то, что все в test.c получает снова скомпилирован с явным влиянием на время сборки , Если это становится проблемой, вы можете рассмотреть вопрос об извлечении статических функций, которые должны быть протестированы, в их собственный исходный файл (например, test_p.c, причем _p означает private/internal). Затем #include "test_p.c" от test.c и вашего модульного теста.

-1

A static Функция имеет видимость, ограниченную единицей перевода.

AFAIK, для googletest, вам нужно вызвать те или иные функции из отдельного тестового файла, содержащего тестовый код, написанный TEST(). Если тестируемая функция равна static, просто невозможно проверить ее непосредственно из вызова MACRO TEST().

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

+0

Учитывая, что обычные проекты имеют десятки, если не даже hundrets или тысячи единиц компиляции, комментирование ключевого слова 'static' - не очень практичный подход. – Anticom

1

Я понимаю, что для проверки функции с помощью теста Google она должна быть видимой для тестового кода. Статическая функция доступна только для текущего блока компиляции.

Способ обойти это, чтобы «удалить» статический атрибут для целей тестирования:

#ifndef GOOGLE_TEST 
# define STATIC static 
#else 
# define STATIC 
#endif 

STATIC int getData(); 

Если это дает конфликты, например, потому что Aer getData() функции во многих исходных файлов, вы можете создать простой Функции контейнера:

static int getData(<arglist>); 

#ifdef GOOGLE_TEST 
int myModule_getData(<arglist>) {return(getData(<arglist>);} 
... 
#endif