我是一個很長時間潛伏在董事會,不用說,你們是最好的,我很感謝你保存我的工作的所有時間。這是我第一次在這裏發帖,我希望我不要搞砸了。海龜模擬:MOCK_EXPECT失敗,如果模擬類方法返回一個值
我正在爲Linux(虛擬化Ubuntu 16.04 amd_64)編寫一個C++ Boost應用程序,並且正在使用Turtle Mock進行模擬框架和測試框架的Boost測試。當我嘗試測試使用依賴注入技術的類時,我嘲笑需要提供給測試類的類,以便我可以驗證它們的調用順序。非常好,但問題來了。 我正在使用MOCK_BASE_CLASS(MockAClass,AClass)覆蓋真實AClass的虛擬方法,並使用新的MockAClass繼續我的測試。假設在設置MockAClass對象的getTest方法的期望值和返回值並調用該方法後,AClass有一個虛擬方法int getTest(int),並且MockAClass具有MOCK_METHOD(getTest,1,int(int)),在大多數情況下是MOCK_EXPECT(objMockAClass.getTest).at_least(1)從未驗證過。我可以控制返回值,但呼叫從未被驗證過。這隻發生在函數返回一個值(例如,如果函數是void getTest(int),那麼驗證通過)。
我附上一個簡單的PoC我的問題,將在我的系統上失敗。
class AClass
{
public:
virtual int getTest(int a) {return 0}
}
MOCK_BASE_CLASS (MockAClass, AClass)
{
MOCK_METHOD(getTest, 1, int(int));
}
BOOST_AUTО_TEST_CASE(SomeClassFunctionality)
{
MockAClass objMockAClass;
MOCK_EXPECT(objMockAClass.getTest).returns(1);
MOCK_EXPECT(objMockAClass.getTest).at_least(1);
objMockAClass.getTest(1);
}
是的,這是正確的。它將它們作爲兩個單獨的互斥語句來處理,這就是它失敗的原因。謝謝你的支持。 :) –