我正在尝试使用Cmockery来模拟从 C++ 代码调用的 C 函数。因为 SUT 使用 C++,所以我的测试需要使用 C++。
当我像这样使用 Cmockery expect_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中看到了 expect_string 的定义:
#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
将 expect_string_count 宏作为const char* string
参数传递给 _expect_string() 函数。
我已经extern "C"
在 my_tests.cpp 中使用了 cmockery.h ,如下所示:
extern "C" {
#include <cmockery.h>
}
...为了解决名称修改问题。(请参阅“如何编译和链接 C++ 代码与已编译的 C 代码? ”)
是否有命令行选项或其他方式告诉 g++ 如何放宽对从我的测试的 C++ 代码到 cmockery.c 中的 C 函数的类型转换的限制?
这是我目前用来构建 my_tests.cpp 的命令:
g++ -m32 -I ../cmockery-0.1.2 -c my_tests.cpp -o $(obj_dir)/my_tests.o