Я пытаюсь использовать Cmockery для имитации функций C, вызываемых из кода C ++. Поскольку SUT находится в C ++, мои тесты должны быть в C ++.
Когда я использую макрос Cmockery wait_string () следующим образом:
expect_string(mock_function, url, "Foo");
Я получаю:
my_tests.cpp: In function ‘void test_some_stuff(void**)’:
my_tests.cpp:72: error: invalid conversion from ‘void*’ to ‘const char*’
my_tests.cpp:72: error: initializing argument 5 of ‘void _expect_string(const char*, const char*, const char*, int, const char*, int)’
В cmockery.h я вижу, что строка_перечисления определена:
#define expect_string(function, parameter, string) \
expect_string_count(function, parameter, string, 1)
#define expect_string_count(function, parameter, string, count) \
_expect_string(#function, #parameter, __FILE__, __LINE__, (void*)string, \
count)
А вот прототип _expect_string (из cmockery.h):
void _expect_string(
const char* const function, const char* const parameter,
const char* const file, const int line, const char* string,
const int count);
Я считаю, что проблема в том, что я компилирую код C как C ++, поэтому компилятор C ++ возражает против (void*)string
в макросе hope_string_count, передаваемом в качестве параметра const char* string
в функцию _expect_string ().
Я уже использовал extern "C"
для включения cmockery.h в my_tests.cpp, например:
extern "C" {
#include <cmockery.h>
}
... чтобы обойти проблему искажения имен. (См. " Как мне скомпилировать и связать код C ++ с скомпилированным кодом C? ")
Есть ли опция командной строки или какой-либо другой способ сообщить g ++, как ослабить свои ограничения на приведение типов из кода C ++ моего теста в функцию C в cmockery.c?
Это команда, которую я сейчас использую для сборки my_tests.cpp:
g++ -m32 -I ../cmockery-0.1.2 -c my_tests.cpp -o $(obj_dir)/my_tests.o