2017-01-15 12 views
0

私はgmockで遊んでいます。私はそれがニュアンスであることを学ぶために使っている実例を持っています。私は暗黙のコピーコンストラクタ期待したものに呼び出しに問題があります。今gmockは暗黙的に削除されたコピーコンストラクタを呼び出します

// mock_word.h 
class MockWord : Word { 
public: 
    MockWord(const std::string word) : Word(word) {}; 
    MOCK_METHOD0(pigLatinify, std::string(void)); 
}; 

// strings.h 
template <typename Word> 
class Strings { 
... 
private: 
    std::vector<Word>* words = new std::vector<Word>(); 
public: 
    // This should call the implicit copy constructor 
    void addWord(const Word word) { 
     this->words->push_back(word); 
    }; 
... 
}; 

// strings_test.cpp 
class StringsTest : public ::testing::Test { 
protected: 
    Strings<MockWord>* strings; 
public: 
    virtual void SetUp() { 
     strings = new Strings<MockWord>(); 
    }; 
    virtual void TearDown() { 
     delete strings; 
    }; 
}; 

TEST_F(StringsTest, StringIsAllPigLatinifiedNicely) { 
    MockWord mockWordA("beast"); 
    MockWord mockWordB("dough"); 

    // Set some expectations for the Mock 
    EXPECT_CALL(mockWordA, pigLatinify()).Times(AtLeast(1)); 
    EXPECT_CALL(mockWordB, pigLatinify()).Times(AtLeast(1)); 

    strings->addWord(mockWordA); 
    strings->addWord(mockWordB); 
    ... 
}; 

、私はおそらくこのcomplileを持っていると私はポインタへの自動変数からmockWordAmockWordBを変換する場合は仕事ができるが、それはありません私が提供したいインターフェイス。

私は取得しています正確なエラーは次のとおりです。

error: call to implicitly-deleted copy constructor of 'MockWord' 
    strings->addWord(mockWordA); 
        ^~~~~~~~~ 
mock_word.h:11:9: note: copy constructor of 'MockWord' is implicitly  deleted because field 'gmock0_pigLatinify_11' has a deleted copy  constructor 
    MOCK_METHOD0(pigLatinify, std::string(void)); 
+0

Googleモックのモックはコピーできません – PiotrNycz

+0

[期待値を設定してGoogleモックオブジェクトをコピーすることはできますか?](http://stackoverflow.com/questions/33043640/can-i-copy-a-google-模擬オブジェクトを設定した後の期待) – PiotrNycz

+0

私はオブジェクトをポインタ型にすることでこの基本テストを達成できますか?それは制限的なようだ。 – wulfgarpro

答えて

0

は私が私には私はむしろ、このような基本的な例でポインタを使用していないだろうことを考えると、制限思わStrings::addWord(Word* word)に私の関数インタフェースを変更することで問題を解決しました。

関連する問題