2017-05-03 36 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);