gmock は、モック関数のパラメーターとしての右辺値参照をサポートしていません (課題レポート)。
たとえば、次のコードはコンパイルされません。
MOCK_METHOD1(foo,void(std::string&&));
gmock がこれにいつサポートを追加するかについての情報が見つかりません。
私は回避策を見つけました: モックされていない関数を使用してfoo(std::string&& s){foo_rvr(s)}
、関数をモックされた関数に中継しますfoo_rvr(std::string)
。これが完全なプログラムです。
#include <string>
#include <gtest/gtest.h>
#include <gmock/gmock.h>
class RvalueRef
{
public:
virtual void foo(const std::string&)=0;
virtual void foo(std::string&&)=0;
};
class MockRvalueRef : public RvalueRef
{
public:
void foo(std::string&& s){foo_rvr(s);}
MOCK_METHOD1(foo,void(const std::string&));
MOCK_METHOD1(foo_rvr,void(std::string));
};
TEST(RvalueRef, foo)
{
MockRvalueRef r;
{
::testing::InSequence sequence;
EXPECT_CALL(r,foo("hello"));
EXPECT_CALL(r,foo_rvr("hi"));
}
std::string hello("hello");
r.foo(hello);
r.foo("hi");
}
int main(int argc, char* argv[])
{
::testing::InitGoogleMock(&argc,argv);
int rc=RUN_ALL_TESTS();
getchar();
return rc;
}