У меня есть функция C ++ для тестирования, и внутри этой функции C ++ она будет вызывать функцию C. Я хотел бы издеваться над этой функцией C с помощью Gmock. Подпись функции C:
int functionA(const char key[3],char value[6]);
int
- это код возврата, и ввод key
, вывод value
. Я хочу смоделировать возвращаемое значение и установить второй аргумент.
Функция C ++, которую я хотел бы проверить:
int functionB{
....
int rcode = functionA(key, value);
.......
}
Мой "mock.h" это:
#include<functionA.h>
#include <gmock/gmock.h>
class function_A_interface {
public:
virtual int functionA(const char key[3],char value[6]) = 0;
};
class function_A_mock : public function_A_interface {
public:
MOCK_METHOD2(functionA, int(const char[3], char[6]));
}
Мой "mock.cc" это:
#include <function_A_mock.h>
extern function_A_mock MockObj;
int function_A(const char key[3],char value[6])
{
return MockObj.functionA(key, value);
}
Мой "test.t.cpp" это:
TEST(Test, tes){
function_A_mock MockObj;
pa[3] = {0};
pb[6] = {1};
EXPECT_CALL(MockObj, functionA(pa, pb)).WillOnce(DoAll(SetArgPointee<1>(*set), Return(3)));
functionB(parameter1, parameter2); // it will convert these two paramters to according input in functionA
}
но это показывает мне:
Unexpected mock function call - returning default value.
Function call: functionA(ffbfc5b0 pointing to "abc E", ffbfc570 pointing to "")
Returns: 0
Google Mock tried the following 1 expectation, but it didn't match:
test.t.cpp:121: EXPECT_CALL(MockObj, functionA(pa, pb))...
Expected arg #0: is equal to ffbfd380 pointing to "abc E"
Actual: ffbfc5b0 pointing to "abc E"
Expected arg #1: is equal to ffbfd340 pointing to ""
Actual: ffbfc570 pointing to ""
Expected: to be called once
Actual: never called - unsatisfied and active
Кажется, я никогда не смогу сопоставить параметры, которые я установил, поэтому он никогда не будет вызван. Как смоделировать строку C для совпадения и установки цели аргумента в моем случае? Спасибо.