按照慣例先我參考的資料列一下,
https://blog.csdn.net/tony_wong/article/details/38752355
https://blog.csdn.net/Tony_Wong/article/details/38752483
https://blog.csdn.net/xueyong4712816/article/details/34086649
https://blog.csdn.net/tony_wong/article/details/38752395
這些資料大多來自官網的手冊, https://code.google.com/p/mockcpp。 本文主要根據簽名的一些介紹加上本身的實踐,主要介紹若是使用mockcpp對C函數進行測試。ide
mockcpp 的主要功能就是打樁。核心中的核心就是,一旦某個函數被MOCKER後,就不會執行被MOCKER的真實函數了,當調用被MOCKER的函數時,被MOCKER函數的行爲就由MOCKER後面的規範決定,包括函數的返回值,入參判斷,執行次數,設置指針做爲返回值的值,等等。基本上能夠實現你全部的幻想。以下圖所示,正常狀況下,Func_A()函數會調用Func_B()函數,可是咱們一旦MOCKER(Func_B)後,Func_A調用的就不是真正的Func_B函數,而是由MOCKER規範制定的函數。
函數
mockcpp的主要應用場景就是單元測試,在單元測試中,被依賴的模塊可能處於不可用的狀態或者行爲難以控制,就像上圖中的Func_B的行爲可能很差控制,或者自己就處於不可用,這時又須要測試Func_A()。就能夠採用mockcpp 把Func_B打樁掉,由MOCKER規範控制函數的行爲。單元測試
int add(int a, int b) { return a + b; } TEST_F(TestCaseName, TestName) { MOCKER(add) .stubs() .will(returnValue(4)); EXPECT_EQ(4, add(1, 1)); }
TEST(mockcpp detail sample) { MOCKER(function) / MOCK_METHOD(mocker, method) .stubs() / defaults() / expects(never() | once() | exactly(3) | atLeast(3) | atMost(3) ) [.before("some-mocker-id")] [.with( any() | eq(3) | neq(3) | gt(3) | lt(3) | spy(var_out) | check(check_func) | outBound(var_out) | outBoundP(var_out_addr, var_size) | mirror(var_in_addr, var_size) | smirror(string) | contains(string) | startWith(string) | endWith(string) )] [.after("some-mocker-id")] .will( returnValue(1) | repeat(1, 20) | returnObjectList(r1, r2) | invoke(func_stub) | ignoreReturnValue() | increase(from, to) | increase(from) | throws(exception) | die(3)) [.then(returnValue(2))] [.id("some-mocker-id")] }