pkpm桩基础建模(项目推荐-CPP单元测试打桩)

不管你是开发的老码农,还是新入职场菜鸟,只要你是项目里负责写代码的,都得多多少少写点单元测试代码。企业对质量也会有些要求,像单元测试的覆盖率达到100%这种要求。

不管你是开发的老码农,还是新入职场菜鸟,只要你是项目里负责写代码的,都得多多少少写点单元测试代码。企业对质量也会有些要求,像单元测试的覆盖率达到100%这种要求。

其实单元测试达到60%左右可能效率上最高,发挥的作用最大。但硬性指标就是硬性指标,还是得想办法来满足指标要求。

推荐一项开源项目CPP-存根,专门为C单元测试打桩而设计的,使用简单的应用程序接口就能完成函数的替换,让你的覆盖率分分钟达到100%。

项目介绍

支持的操作系统: windows,linux支持的硬件平台: x86、x86-64、arm64、arm32、mips64支持的编译器: msvc,gcc,clang示例了各种获取函数的方法,像构造函数、虚函数、私有函数、模板函数、重载函数、仿函数、静态函数地址等基于gtest、catch2框架模板项目地址:https://github.com/coolxv/cpp-stub

打桩概念:用新实现的函数替换被测代码中的函数,当运行时原先执行函数1,当函数一被函数2替换(即打桩)时,就会运行函数2。

类成员函数例子

#包括牡蛎#使用命名空间标准包含“存根哈类{ int I;public : int foo(int A){ cout ' I是A _ foo ' endl返回0;}};int foo_stub(void* obj,int A){ A * o=(A *)obj;我是foo _ stub 'endl返回0;} int main(){ Stub Stub;stub.set(ADDR(A,foo),foo _ stub);aa。foo(1);返回0;}示例代码调用A:foo,但经过打桩后会变为调用foo_stub。

类的私有成员函数例子

//对于Linux # include I ostream # include ' stub。h ' # include ' addr _ pri。h使用命名空间stdA类{ int A;int foo(int x){ cout ' I是A _ foo ' A endl返回0;}静态int b;静态int bar(int x){ cout ' I是A _ bar ' b endl返回0;}};ACCESS_PRIVATE_FIELD(A,int,A);ACCESS_PRIVATE_FUN(A,int(int),foo);ACCESS_PRIVATE_STATIC_FIELD(A,int,b);ACCESS_PRIVATE_STATIC_FUN(A,int(int),bar);int foo_stub(void* obj,int x){ A * o=(A *)obj;我是foo _ stub 'endl返回0;} int bar _ stub(int x){ cout ' I am bar _ stub ' endl;返回0;} int main(){ A A;auto A _ A=access _ private _ field : aa(A);auto A _ b=access _ private _ static _ field : A : ab();a _ a=1;a _ b=10 call _ private _ fun : afoo(a,1);call _ private _ static _ fun :3360 a : abar(1);auto A _ foo=get _ private _ fun : afoo();auto _ A _ bar=get _ private _ static _ fun : A : abar();存根存根;stub.set(A_foo,foo _ stub);存根集(A_bar,bar _ stub);call _ private _ fun : AFO(a,1);call _ private _ static _ fun :3360 a : abar(1);返回0;}

类的构造函数例子

//对于linux # includeiostream #使用命名空间标准包含" stub.htemplate类Tvoid * get _ ctor _ addr(bool start=true){//start value able必须为没错,否则编译器将优化输出。如果(开始)转到开始;call _ constructor ://不会执行这一行代码。//代码的目的是允许编译器生成调用构造函数的汇编代码t();start ://由程序集char * p=(char*)调用_构造函数获得的代码行t()的地址;//https://gcc。GNU。组织/在线文档/gcc/标签作为值。html int offset=*(int *)(第8页);void * ret=p 12偏移量;返回ret} A类{ public : A(){ cout ' I是A _ constructor ' endl}};B类{ public : B(){ cout ' I是B _ constructor ' endl}};int main(){ 0存根;auto xa=get _ ctor _ addrA();auto XB=get _ ctor _ addrB();stub . set(XB xa);嗜酒者互诫协会级;返回0;}

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/153302.html

(0)

相关推荐

  • 摩托罗拉新edge s系列手机的安兔兔跑分曝光:858852分

    据其他媒体爆料称:今天联想手机的业务负责人刘劲@神奇的劲哥在微博上公布了摩托罗拉新手机的安兔兔跑分。

    科技 2021年11月17日
  • 栀子,清热除烦的良药

    来源:生命时报

    生活 2021年9月25日
  • 经济日报:不要过度解读甚至误读某些必需品的储存。

    商务部近日印发的《关于做好今冬明春蔬菜等生活必需品市场保供稳价工作的通知》中提到,“鼓励家庭根据需要储存一定数量的生活必需品,满足日常生活和突发情况的需要”,一句话引出网友各种猜测,引起热切讨论。

    生活 2021年11月2日
  • 参观博物馆的目的,参加博物馆目的意义

    疫情之前,参观博物馆一直是我家非常重要的亲子活动。从叮当一岁多会走路开始,基本上每个周末我们都会安排时间带他去周边各种名目的博物馆参观,倒不是说我们有多么高大尚的育儿理念,非带那么小的孩子去博物馆接受历史文化熏陶,而是我们发现,在博物馆里,孩子似乎变得特别好带!孩子的注意力被各种新奇的展品吸引,好奇心和求知欲会让他们的烦人指数直线下降;而大人在参观博物馆的过程中会变得很平和,我们会被散落在历史长河中的人、物、事件所震撼,在时间和空间维度上体会到自己的渺小和无知。 通常情况下,在博物馆里,父母会成为孩子的向导,在一边看、一边讲的过程中,孩子可以不断汲取知识,而大人在这个过程中会收获育儿的成就感,实在是一件一举多得的事。

    生活 2021年12月4日
  • 围观 2021年各手机品牌旗舰产品 你心目中的排名是什么样的?

    纵观2021年手机旗舰产品市场、战况也是非常激烈、各品牌对高端的把控也是越来越精准、虽然华为受特殊原因、旗舰产品市场比例一直呈现下滑、 但是折叠屏产品却扛起了大旗、让我们来回顾一下今年手机市场的旗舰产品、 以下非排名不分先后 。

    科技 2021年12月2日