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 实例