10

gmock は、モック関数のパラメーターとしての右辺値参照をサポートしていません (課題レポート)。

たとえば、次のコードはコンパイルされません。

MOCK_METHOD1(foo,void(std::string&&));

gmock がこれにいつサポートを追加するかについての情報が見つかりません。

4

1 に答える 1

12

私は回避策を見つけました: モックされていない関数を使用して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;
}
于 2012-08-23T09:22:45.060 に答える