2016-01-19 1 views
2

J'utilise Google Mock (gMock) pour la première fois. Compte tenu de l'extrait de code suivant:Comment inspecter l'argument d'un gmock EXPECT_CALL()?

class LinkSignals 
{ 
    public: 
     virtual ~LinkSignals() { } 

     virtual void onLink(std::string) = 0; 
     virtual void onUnLink() = 0; 
}; 


class MockLinkSignals : public LinkSignals 
{ 
    public: 
     MOCK_METHOD1(onLink, void(std::string)); 
     MOCK_METHOD0(onUnLink, void()); 
}; 

MockLinkSignals mock_signals;

Lorsque j'exécute un code de test qui provoque EXPECT_CALL(mock_signals, onLink(_)) à exécuter comment puis-je vérifier l'argument onLink()?

Répondre

5

Normalement, vous utiliserez des correspondeurs gmock existants ou définissez les vôtres pour vérifier les arguments transmis à la méthode fictive.

Par exemple, en utilisant l'égalité par défaut équation matcher:

EXPECT_CALL(mock_signals, onLink("value_I_expect")) 

Ou vérifier sous-chaîne dire:

EXPECT_CALL(mock_signals, onLink(HasSubstr("contains_this"))) 

La documentation gmock fournit des détails sur les matchers standard qui sont disponibles, et aussi décrit comment créer des coupleurs personnalisés, par exemple pour un type d'argument entier:

MATCHER(IsEven, "") { return (arg % 2) == 0; } 

Il est possible de saisir un argument à une variable en attachant une action à l'attente, bien que cela puisse avoir une utilisation limitée dans le cadre de l'attente:

EXPECT_CALL(mock_signals, onLink(_)).WillOnce(SaveArg<0>(pointer)) 

Je suggère d'étudier les différentes matchers et actions disponibles avant de choisir la meilleure approche pour votre cas particulier.

+0

Merci! Appréciez-le. Je vais sélectionner une réponse quand un peu plus viennent. – Chimera