Loading

0 引言

  • mock:模拟,用于验证外部依赖的交互行为,通常用于未实现的依赖
  • stub:存根,用于提供外部依赖的固定响应,通常用于已实现的依赖
  • GTest:GTest即Google Test,其是一个由 Google 开发的跨平台测试框架,主要用于编写 C++ 程序的单元测试。GTest 帮助开发者编写可靠的代码,通过自动化测试来验证代码的正确性,其有关要点请直接参阅 GoogleTest Primer | GoogleTest

博主搭建的单元测试框架最常用的搭配就是GTest+mockcpp,主要用于针对C语言的项目做单元测试。

1 mockcpp简介

mockcpp工具是一个打桩工具,用于指定函数的行为。其可以对入参进行校验,对出参进行设定,指定函数的返回值。

其支持七种类型的约束:

  • 调用次数约束 —— expects()/stubs()
  • 调用者约束 —— caller()
  • 先行调用约束 —— before()
  • 调用参数约束 —— with()
  • 后行调用约束 —— after()
  • 调用行为约束 —— will()/then()
  • 标识符指定 —— id()

2 mock模板

TEST(mockcppDetailSample)
{
    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")]
}

3 mock规范

每个MOCKER(function)开始,跟着一系列的.stubs/.with/.will等的内容整体,称为一个mock规范。

除调用次数约束之外,所有其它的调用约束都可以任意存在。但若使用了其中的一部分或全部,则必须按照上面所列的顺序给出。

4 核心关键字

stubs/defaults/expects/before/with/after/will/then/id等这些直接跟在点"."后面的关键字

5 扩展关键字

once()/eq()/check()/returnValue()/repeat()等这些作为核心关键字参数的关键字

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

👤本站访客数: 👁️本站访问量: