2016-12-11 95 views
0

我有一個單元測試代碼,我有一個模擬函數foo。當我使用ON_CALL構造來指定動作時,它不執行my_action,而是執行foo。ON_CALL不起作用,但EXPECT_CALL起作用

ON_CALL(my_mock, foo(my_matcher())) 
.WillByDefault(DoAll(my_action(), Return(0))); 

但是當我做EXPECT_CALL,它的工作原理。在我的情況下,foo()只會被調用一次。我試圖看看它可能會有所不同。但谷歌搜索或搜索stackoverflow沒有幫助。下面是工作的EXPECT_CALL:

EXPECT_CALL(my_mock, foo(my_matcher())) 
.WillOnce(DoAll(my_action(), Return(0))); 

我不明白他們是如何給予相同的my_matcher和my_action不同。

回答

0

ON_CALL提供默認操作以在符合預期時運行。因此,除非在EXPECT_CALL中定義的期望得到滿足,否則ON_CALL中定義的操作不會觸發。 ON_CALL的典型用例是替換您的EXPECT_CALL中的一組相同的WillOnce/WillRepeatedly條款。要使您的代碼段工作,它將需要如下所示:

ON_CALL(my_mock, foo(_)) 
    .WillByDefault(DoAll(my_action(), Return(0))); 
EXPECT_CALL(my_mock, foo(my_matcher())).Times(1); 
EXPECT_CALL(my_mock, foo(my_other_matcher())).Times(1); 
+0

謝謝,但我的問題沒有回答。在這兩種情況下,期望都會得到滿足,因爲我使用相同的輸入進行相同的單元測試。 ON_CALL如何不導致my_action被執行,而EXPECT_CALL呢? – Gops

+0

正如我所說的,'ON_CALL'只能在預期通過呼叫完成時運行。如果你沒有定義'EXPECT_CALL',那麼沒有什麼可以實現的。 – VladLosev

相關問題