如果我有以下接口成员函数:
virtual bool print_string(const char* data) = 0;
使用以下模拟
MOCK_METHOD1(print_string, bool(const char * data));
是否可以捕获传递给print_string()的字符串?
我试图:
char out_string[20]; //
SaveArg<0>(out_string); // this saves the first char of the sting
这会保存sting的第一个char而不是整个字符串。
答案 0 :(得分:3)
<强>类强>
struct Foo {
virtual bool print_string(const char* data) = 0;
};
<强>模拟强>
struct FooMock {
MOCK_METHOD1(print_string, bool(const char * data));
};
测试
struct StrArg {
bool print_string(const char* data) {
arg = data;
return true;
}
string arg;
};
TEST(FooTest, first) {
FooMock f;
StrArg out_string;
EXPECT_CALL(f, print_string(_))
.WillOnce(Invoke(&out_string, &StrArg::print_string));
f.print_string("foo");
EXPECT_EQ(string("foo"), out_string.arg);
}
您始终可以使用Invoke捕获结构中的参数值。
答案 1 :(得分:0)
可能是这样的:
char* p = out_string[0];
SaveArg<0>(&p);
因为SaveArg(指针)将第N个参数保存到*指针。
我认为如果你只需要在没有深层复制的情况下验证数组的内容,就不需要创建另一个数组,因为只有使用这种方法才能获得指向数组的指针。