1
我有一個測試是這樣的:GMock - 如何刷新模擬返回值?
#include <gmock/gmock.h>
using namespace ::testing;
class IMyInterface
{
public:
virtual ~IMyInterface() = default;
virtual void* DoAllocate(size_t size) = 0;
};
class MockMyInterface : public IMyInterface
{
public:
MOCK_METHOD1(DoAllocate, void*(size_t));
};
class InterfaceUser
{
public:
void DoIt(IMyInterface& iface)
{
void* ptr = iface.DoAllocate(1024);
free(ptr);
ptr = iface.DoAllocate(1024);
free(ptr);
}
};
TEST(MyTest, AllocateMock)
{
MockMyInterface mockIFace;
EXPECT_CALL(mockIFace, DoAllocate(1024)).WillRepeatedly(Return(malloc(1024)));
InterfaceUser user;
user.DoIt(mockIFace);
}
int main(int numArgs, char** args)
{
::testing::InitGoogleMock(&numArgs, args);
return RUN_ALL_TESTS();
}
這會崩潰,因爲被測試通話DoAllocate
與1024
兩次「真正的」代碼。但gmock似乎只有這樣做:
Return(malloc(1024))
有一次,即使它被稱爲兩次。顯然這是一個問題,因爲它意味着malloc被調用一次1024,然後「真正的」代碼釋放相同的指針兩次。
如何強制gmock在每次模擬調用中實際執行malloc(1024)
?
感謝 - 打開你的malloc調用可以返回()這樣太:) – paulm
@paulm歡迎您內內聯!我已經很快就寫出了答案,並且由於我並不是100%確定如果在「Return」中內聯可以工作,我已經使用了臨時對象。 :) –