2016-12-19 3 views
2

私がgmockを理解しているから(と私は初めてです)EXPECT_CALLは、メソッドが呼び出されたときにメソッドがどのように動作するかを指定することができます(この場合、戻る)。しかし、私は、メソッドをそのボディで明示的に定義することもできます。例:今EXPECT_CALLによるメソッドの振る舞いの指定

class MockFactory : public Factory 
{ 
    int createSomething() 
    { 
     return 5; 
    } 
}; 

class Factory 
{ 
    int createSomething(); 
}; 

class MockFactory : public Factory 
{ 
    MOCK_METHOD0(createSomething, int()); 
}; 

int main() 
{ 
    ... 
    int something(5); 
    MockFactory mockFactory; 
    EXPECT_CALL(mockFactory, createSomething()).WillRepeatedly(Return(something)); 
    ... 
} 

createSomethingはその後、明らかに異なるシナリオで(異なるものを返す)異なる動作をした場合、私はEXPECT_CALLを使用する必要があります。しかし、それが常に同じことを返すなら、メソッドのボディを明示的に定義するほうがよいでしょうか?

答えて

1

メソッドを定義すると、そのメソッドをモックすることでテストに与えられるすべての柔軟性が失われます。

createSomethingが呼び出されるというテストでアサートする必要がある場合は、標準のメソッド定義を持っているのではなく、あなたがそれを嘲笑した場合にのみ行うことができます。この場合ではなく、パラメータを取るメソッドの場合は、モックを持つ方が良いです。

あなたがTestFixtureSetUpメンバ関数でON_CALLマクロを使用して、そう、あなたがそれにどんな期待を設定していない場合でも、あなたの方法を実行するデフォルトのアクションを設定する必要がある場合。