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 コードでコンパイルおよびリンクするにはどうすればよいですか?」を参照してください) 。
テストの C++ コードから cmockery.c の C 関数への型キャストに関する制限を緩和する方法を g++ に伝えるコマンド ライン オプションまたはその他の手段はありますか?
これは、my_tests.cpp をビルドするために現在使用しているコマンドです。
g++ -m32 -I ../cmockery-0.1.2 -c my_tests.cpp -o $(obj_dir)/my_tests.o