考慮某種模擬函數預期會被多次調用的情況,每次在某個參數中使用不同的值。我想驗證一下,函數在某個值列表(例如1,2,5)中確實被稱爲每個值一次且只有一次。Google Mock:對具有不同參數的相同函數的多重期望
另一方面,我想避免定義一個序列,因爲這將決定一個特定的順序,這是我想保留免費的實現細節。
這種情況下是否存在某種匹配器或其他解決方案?
我不確定這是否會以任何方式影響解決方案,但我打算在上面的列表中使用WillOnce(Return(x)),其值爲每個值不同的x。
考慮某種模擬函數預期會被多次調用的情況,每次在某個參數中使用不同的值。我想驗證一下,函數在某個值列表(例如1,2,5)中確實被稱爲每個值一次且只有一次。Google Mock:對具有不同參數的相同函數的多重期望
另一方面,我想避免定義一個序列,因爲這將決定一個特定的順序,這是我想保留免費的實現細節。
這種情況下是否存在某種匹配器或其他解決方案?
我不確定這是否會以任何方式影響解決方案,但我打算在上面的列表中使用WillOnce(Return(x)),其值爲每個值不同的x。
默認情況下,gMock的期望值可以以任何順序滿足(正因爲你提到的原因 - 所以你不要指定你的測試)。
在你的情況,你只是想是這樣的:
EXPECT_CALL(foo, DoThis(1));
EXPECT_CALL(foo, DoThis(2));
EXPECT_CALL(foo, DoThis(5));
而且是這樣的:
foo.DoThis(5);
foo.DoThis(1);
foo.DoThis(2);
將滿足這些期望。
(旁白:如果您沒有想約束的順序,你應該使用InSequence
:https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#expecting-ordered-calls)
如果你希望一個函數,DoThing
,與許多不同的參數來調用,您可以使用以下圖案:
for (auto const param : {1, 2, 3, 7, -1, 2}{
EXPECT_CALL(foo, DoThing(param));
}
這是特別有幫助的,如果你的EXPECT_CALL
包括許多參數,其中只有一個是變化的,或者如果你的EXPECT_CALL
包括許多Action
s到重複。
我在寫這個問題時一定是分層次的。我會把它發佈給所有其他分層程序員:) – Jonathan 2011-05-06 11:47:41
不能使EXPECT_CALL更緊湊嗎?例如:EXPECT_CALL(foo,DoThis(參數<1, 2, 5>)); ? – xwl 2016-11-11 08:41:38