mockcpp學習實踐總結

前言

按照慣例先我參考的資料列一下,
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簡介

mockcpp 的主要功能就是打樁。核心中的核心就是,一旦某個函數被MOCKER後,就不會執行被MOCKER的真實函數了,當調用被MOCKER的函數時,被MOCKER函數的行爲就由MOCKER後面的規範決定,包括函數的返回值,入參判斷,執行次數,設置指針做爲返回值的值,等等。基本上能夠實現你全部的幻想。以下圖所示,正常狀況下,Func_A()函數會調用Func_B()函數,可是咱們一旦MOCKER(Func_B)後,Func_A調用的就不是真正的Func_B函數,而是由MOCKER規範制定的函數。
mockcpp學習實踐總結函數

mockcpp的主要應用場景就是單元測試,在單元測試中,被依賴的模塊可能處於不可用的狀態或者行爲難以控制,就像上圖中的Func_B的行爲可能很差控制,或者自己就處於不可用,這時又須要測試Func_A()。就能夠採用mockcpp 把Func_B打樁掉,由MOCKER規範控制函數的行爲。單元測試

mockcpp helloworld

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));
}

mockcpp 規範介紹

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")]
}

mockcpp 實例

相關文章
相關標籤/搜索