As you can read in gmock doc :
SaveArg (pointer) Save the argument of the Nth (0) in the * pointer.
SaveArgPointee (pointer) Save the value pointed to by the Nth (0-based) argument to a * pointer.
, SaveArgPointee - (PACKET_DATA *Data) - ...
:
struct SomeData { int a; };
class ISomeClass
{
public:
virtual ~ISomeClass() = default;
virtual void foo(SomeData*) = 0;
};
void someFunction(ISomeClass& a)
{
SomeData b{1};
a.foo(&b);
}
class SomeMock : public ISomeClass
{
public:
MOCK_METHOD1(foo, void(SomeData*));
};
someFunction, , foo:
TEST(TestSomeFoo, shallPassOne)
{
SomeData actualData{};
SomeMock aMock;
EXPECT_CALL(aMock, foo(_)).WillOnce(::testing::SaveArgPointee<0>(&actualData));
someFunction(aMock);
ASSERT_EQ(1, actualData.a);
}
SaveArg - , :
TEST(TestSomeFoo, shallPassOne_DanglingPointer)
{
SomeData* actualData;
SomeMock aMock;
EXPECT_CALL(aMock, foo(_)).WillOnce(::testing::SaveArg<0>(&actualData));
someFunction(aMock);
ASSERT_EQ(1, actualData->a);
}