2017-11-13 17 views
-2

Catクラスがあるとします。パラメータのエネルギーに応じて、show_cat関数が呼び出されます。正しいメソッドが同じクラスのメソッドによって呼び出されたかどうかをテストする方法C++ gmock

class Cat{ 

public: 

    int energy; 

    virtual void show_cat() 
    { 
     if(energy < 10) 
     { 
      show_tired_cat(); 
     } 
     else 
     { 
      show_energized_cat(); 
     } 
    } 

    virtual void show_tired_cat(){} 
    virtual void show_energized_cat(){} 
}; 

右ショー機能がgmockを使用して呼び出された場合にどのようにテストすることができますか?次

はもちろん間違っている、しかし、あなたがと遊ぶことができる構造を与えるためにそこにある:あなたが、そうなぜあなたがダウンして質問を投票した場合

#include<gmock/gmock.h> 
#include<gtest/gtest.h> 

class MockCat: public Cat 
{ 
public: 
    MOCK_METHOD0(show_tired_cat,void()); 
    MOCK_METHOD0(show_energized_cat,void()); 
}; 

TEST (catTest, show_cat){ 

    //This is of course not working 
    Cat realCat; 
    realCat.energy = 3; 
    realCat.show_cat(); 

    MockCat fakeCat; 
    EXPECT_CALL(fakeCat,show_tired_cat()).Times(1); 
    EXPECT_CALL(fakeCat,show_energized_cat()).Times(0); 
} 

int main(int argc, char *argv[]) 
{ 
    ::testing::InitGoogleTest(&argc, argv); 
    return RUN_ALL_TESTS(); 
} 

、その後、コメントしてください、私はできるように改善する。

+0

期待を設定した後に 'fake.show_cat()'を呼び出さないでください。 – user0042

+0

また、 'realCat'の' show_tired_cat'メソッドを呼び出す 'realCat'の' show_catメソッド 'を再度呼び出すため、期待値を設定した後に' fakeCat.show_cat(); 'を呼び出しても何も変更されません。 – newandlost

答えて

0

MockCatクラスのメソッドを手動でモックしたり、カウンタをチェックしたりできますか?例:

class MockCat: public Cat 
{ 
public: 
    int tiredCount; 
    int energizedCount; 
public: 
    void show_tired_cat() { 
     tiredCount++; 
     Cat::show_tired_cat(); 
    } 

    void show_energized_cat() { 
     energizedCount++; 
     Cat::show_energized_cat(); 
    } 
}; 

TEST (catTest, show_cat){ 
    MockCat fakeCat; 
    fakeCat.energy = 3; 
    fakeCat.tiredCount = 0; 
    fakeCat.energizedCount = 0; 
    fakeCat.show_cat(); 
    ASSERT_EQ(fakeCat.tiredCount, 1); 
    ASSERT_EQ(fakeCat.energizedCount, 0); 

} 

このコードではgmockを直接使用していませんが、これが役に立ちます。

関連する問題