2017-08-08 2 views
1

code:GMock EXPECT_CALL ne correspond pas à 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)); 
... 
} 

J'ai un problème ou au moins un comportement inattendu lors de l'exécution de ce test: Si je commente la EXPECT_CALL's spécifique, le test fonctionne très bien, mais si je ne je reçois cet échec:

erreur:

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 

Question:

Ma question est, pourquoi le test échoue? Je suppose que la fonction op1 a été appelée au moins 4 fois, au moins deux fois avec l'argument 5 et deux fois avec l'argument 7. Alors pourquoi le test at-il échoué?

+0

Avec quelles valeurs s'appelle-t-on? –

+0

deux fois avec '(true, 7L)' et deux fois avec '(true, 5L)' –

Répondre

1

Je pense que dans ce cas, les attentes

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

sont appelés et

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

n'est pas appelé, parce correspondent aux deux autres. Avec gmock, une seule correspondance est exécutée, pas toutes les correspondances. Un EXPECT_CALL peut par exemple renvoyer des valeurs. Ce ne serait pas unique si plus d'un match est appelé.