2013-10-29 21 views
2

我有一個模擬類是這樣的:關掉InSequence的

struct MockClass { 
    MOCK_METHOD0(beginTransaction, void()); 
    MOCK_METHOD0(doSomething, void()); 
    MOCK_METHOD0(doSomethingElse, void()); 
    MOCK_METHOD0(commit, void()); 
}; 

我想測試beginTransaction()是否調用之前調用doSomething()doSomethingElse(),並commit()被稱爲底。我是這樣做的:

{ 
    InSequence s; 
    EXPECT_CALL(*mockObject, beginTransaction()); 
    EXPECT_CALL(*mockObject, doSomething()); 
    EXPECT_CALL(*mockObject, doSomethingElse()); 
    EXPECT_CALL(*mockObject, commit()); 
} 

這是有效的,但它超出了預期。我不關心doSomething()doSomethingElse()的順序,只有beginTransaction()在最開始被調用,commit()在最後被調用。有沒有辦法做到這一點?

回答

3

會是這樣的工作?不幸的是,我還沒有能夠測試它。

Expectation e1 = EXPECT_CALL(*mockObject, beginTransaction()); 
Expectation e2 = EXPECT_CALL(*mockObject, doSomething()).Times(AnyNumber()).After(e1); 
Expectation e3 = EXPECT_CALL(*mockObject, doSomethingElse()).Times(AnyNumber()).After(e1); 
EXPECT_CALL(*mockObject, commit()).After(e1, e2, e3); 

這基本上說,beginTransaction()必須被調用,它必須在其他任何調用之前發生。然後doSomething()doSomethingElse()可以被調用任意次數(包括0)。最後,必須在調用其他函數之後調用commit()