2015-03-13 79 views
2

是否可以使用Google Mock來限定期望值?換句話說,假設我有以下的測試夾具:是否可以在Google Mock中作出範圍期望?

class Fixture : public testing::Test 
{ 
public: 
    void SetUp(); 

    void TearDown(); 

    ObjectUnderTest testObject; 
    MockObject mock; 
}; 

現在,在SetUp()功能,我想允許一個模擬函數調用多次初始化期間是必要的:

void Fixture::SetUp() 
{ 
    EXPECT_CALL(mock.DoStuff(_)).Times(Any()); 
    testObject.Initialise(mock); 
} 

之後,我希望這個特定的期望值超出範圍,並且任何致電DoStuff()的呼叫都會產生故障。我不能使用RetiresOnSaturation(),因爲它永遠不會飽和!

換句話說,如果我有以下測試案例:

TEST_F(Fixture, DoesWhatItsSupposedTo) 
{ 
    EXPECT_CALL(mock, DoStuff(Eq(3))); 
    testObject.DoSomething(mock); 
} 

我想這失敗,如果DoSomething()電話DoStuff(4)模擬對象上。使用gmock默認行爲(這適用於大多數情況),它將首先檢查第二個不匹配的期望;然後它會檢查SetUp()的期望值,它們將匹配並通過。

有誰知道這是可能的嗎?

回答

0

它可能不會真正回答你的問題,但你可以明確地禁止使用.Times(0)撥打電話:

TEST_F(Fixture, DoesWhatItsSupposedTo) 
{ 
    EXPECT_CALL(mock, DoStuff(Eq(3))); 
    EXPECT_CALL(mock, DoStuff(Ne(3))) 
      .Times(0); 
    testObject.DoSomething(mock); 
} 

這將期待的DoStuff(3)一個呼叫和DoStuff()本次測試中沒有其它通話 - 任何電話首先與DoStuff(Ne(3))進行檢查。在測試之前,任何電話都將被接受。

相關問題