2017-05-03 1 views
0

J'utilise google test de simulation & google et j'ai un objet tel que:Vérifiez le programme appelle avec gtest et gmock

class Foo { 
    public : 
     Foo(){} 

     virtual void method(int arg) { 
      int var = a(arg) ; 
      if (var<5){ 
       b() ; 
      } 
     } 

     virtual int a(int arg){ 
      // do stuff 
     } 

     virtual int b(){ 
      // do stuff 
     } 
} 

Je veux vérifier que() est appelée une fois et b() n'est pas chaque fois qu'un échec (= retour d'une valeur < 5) J'ai donc écrit quelque chose comme:

MockFoo mock ; 

mock.method(badArg); 

EXPECT_CALL(
    mock, 
    a 
) 
.Times(1) ; 

EXPECT_CALL(
    mock, 
    a 
) 
.Times(0) ; 

Mais gtest me dire qu'aucune de ces méthodes sont appelées, que dois-je utiliser?

Merci pour vos explications

+1

@ ΦXocę 웃 Пepeúpa ツ mon mauvais, je l'ai fixé – Default

+0

est-il possible de publier votre solution au profit des autres qui cherchent? – BKSpurgeon

+0

@BKSpurgeon Je voulais dire que j'ai corrigé la faute de frappe, pas le problème, cette partie du sujet reste non résolue .. – Default

Répondre

1

Pour utiliser gmock correctement, vous devez configurer votre attente avant vous exécutez la vraie chose. De cette façon, gmock sait ce qui va arriver et sera capable d'analyser si les choses réelles répondent vraiment aux exigences. Sinon, si vous appelez la fonction avant de définir vos attentes, c'est comme demander à un receveur d'entrer dans sa position d'attente après avoir lancé la balle. Le receveur hors cours va manquer.

Dans votre cas, vous voulez quelque chose comme:

MockFoo mock ; 

// Catchers ready! 
EXPECT_CALL(mock, a) 
    .Times(1) ; 
EXPECT_CALL(mock, b) 
    .Times(0) ; 

// Here's the ball!! 
mock.method(watermelon);