2017-08-08 26 views
1

コードと一致しません:GMock EXPECT_CALLがAnyMatcher

class MockDefault : public Verifyingcalls::DefaultSCI_OCB { 
    public: 
    MOCK_METHOD0(op, void()); 
    MOCK_METHOD1(op1, void(sc_integer param1)); 
    MOCK_METHOD2(op2, void(sc_boolean param1, sc_integer param2)); 
}; 

TEST_F(VerifyCallCount, after3Cycle) { 
    MockDefault defaultMock; 

    EXPECT_CALL(defaultMock, op1(_)).Times(AtLeast(4)); 

    EXPECT_CALL(defaultMock, op2(_,_)).Times(AtLeast(4)); 

    EXPECT_CALL(defaultMock, op1(5l)).Times(AtLeast(2)); 

    EXPECT_CALL(defaultMock, op1(7l)).Times(AtLeast(2)); 

    EXPECT_CALL(defaultMock, op2(true, 7l)).Times(AtLeast(2)); 

    EXPECT_CALL(defaultMock, op2(true, 5l)).Times(AtLeast(2)); 
... 
} 

をこのテストを実行しているとき、私は、問題または少なくとも予期しない動作があります。 私はコメントアウトした場合、特定のEXPECT_CALL'sテストはうまく動作しますが、

エラー:

Actual function call count doesn't match EXPECT_CALL(defaultMock, op2(_,_))... 
     Expected: to be called at least 4 times 
      Actual: never called - unsatisfied and active 
..\gtests\VerifyCallCount\VerifyCallCount.cc:123: Failure 
私は、私はこの失敗を取得しない場合

質問:

私の質問は、なぜテストが失敗するのですか? 私は、関数op1が引数4で少なくとも4回、引数5で少なくとも2回、引数7で2回呼び出されたと仮定します。なぜテストは失敗しましたか?

+0

op2が呼び出される値は何ですか? –

+0

'(真、7L)で2回、'(真、5L)で2回 –

答えて

1

私はこのケースで期待

EXPECT_CALL(defaultMock, op2(true, 7l)).Times(AtLeast(2)); 
EXPECT_CALL(defaultMock, op2(true, 5l)).Times(AtLeast(2)); 

が呼び出されていることを考えると

EXPECT_CALL(defaultMock, op2(_,_)).Times(AtLeast(4)); 

は、他の二つは一致しているため、呼び出されません。 gmockでは、すべての一致が実行されるわけではありません。 EXPECT_CALLは、たとえば値を返すことができます。複数の一致が呼び出された場合、それは一意ではありません。

関連する問題