2017-05-03 35 views
0

我使用谷歌模拟&谷歌测试呼叫,我有一个对象,如:验证程序与GTEST&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 
     } 
} 

我要检查一个()被调用一次和b()是不是每当失败(=返回一个值< 5) 所以我写了类似:

MockFoo mock ; 

mock.method(badArg); 

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

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

但GTEST告诉我,没有这些方法被调用,我应该用什么?

感谢您的解释相关

+1

@ΦXocę웃Пepeúpaツ是我不好,我固定它 – Default

+0

是有可能发表您为他人谁搜索效益的解决方案? – BKSpurgeon

+0

@BKSpurgeon我的意思是我修正了错字,而不是问题,这部分内容仍未解决.. – Default

回答

1

要正确使用gmock,你需要设置你的期望之前运行真​​实的东西。这样,gmock知道会发生什么,并且能够分析真正的东西是否真的符合要求。否则,如果你在设定你的期望之前打电话给这个功能,就好像要求捕手在你投球后进入待命位置。捕手离开当然会错过。

在你的情况,你想要的东西,如:

MockFoo mock ; 

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

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