1 / 8

单元测试和 CppStub 介绍

单元测试和 CppStub 介绍. 2009 年 4 月. 陈国栋. 测试框架. 1. 打桩 /mock 工具. Mockcpp 简介. 2. 4. CppStub 介绍. 3. 3. 目录. 2. 1. UnitTest++ : 开源的一个轻量级的 CppUnit ,非常小巧而容易使用 . 缺陷: 无法在被测类中声明测试类 / 函数为它的友元。. CppUnit: 使用最广泛 . 只能在被测类中声明测试类 / 函数为它的友元,才能访问被测类的私有成员。 ( 还是要为了测试改变正式代码,有更好的方法吗? ). 测试框架.

keita
Download Presentation

单元测试和 CppStub 介绍

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 单元测试和CppStub介绍 2009年4月 陈国栋

  2. 测试框架 1 打桩/mock工具 Mockcpp简介 2 4 CppStub介绍 3 3 目录

  3. 2 1 UnitTest++: 开源的一个轻量级的CppUnit,非常小巧而容易使用. 缺陷:无法在被测类中声明测试类/函数为它的友元。 CppUnit: 使用最广泛. 只能在被测类中声明测试类/函数为它的友元,才能访问被测类的私有成员。(还是要为了测试改变正式代码,有更好的方法吗?) 测试框架 #include <UnitTest++.h> TEST(TestCaseName) { int ret = TestFunction(); CHECK(ret ==OK); } Company Logo

  4. 支持C函数打桩的工具,xxx也做过一些利用到vxWorks下的研究。支持C函数打桩的工具,xxx也做过一些利用到vxWorks下的研究。 Stub CppStub Amop Mockcpp XXX 陈国栋 开源 开源 Mock与打桩工具 支持C/C++全局函数/类非虚成员函数打桩的工具。 支持C++虚成员函数Mock(打桩)的工具。 支持C/C++的Mock(打桩)工具。试验中。

  5. CppStub简介 功能描述: 1 C函数/静态成员函数/一般库函数均可以用SET_STUB打桩。 P2ADDR宏把类成员函数指针转换为DWORD类型的地址, 类的成员函数通过类似下面例子的方法打桩。(目前只支持非虚成员。而且该类还不能从有虚函数的类继承,否则它的任何非静态成员都不能打桩。) 2 可以用CStub类更方便的进行打桩,清除桩的操作在析构中自动完成。如: CStub stub(P2ADDR(CSimple::SimpleMethod), Simple_stub); 3 库函数VirtualProtect和四个临界区互斥函数[Initialize/Delete/Enter/Leave]CriticalSection由于在STUB模块内部使用不能被打桩。 4 C文件中使用时包含IStub.h,CPP文件中使用时可以包含功能更强的ICppStub.h。 5 在包含IStub.h/ICppStub.h之前,根据使用的测试框架定义宏USE_CPPUNIT/USE_UNITTESTCPP可以方便的检查SET_STUB打桩是否成功。 6 默认同时存在的桩函数个数为,可以通过SET_STUB_NUM(num)宏重设这个值,重设的时候会把原有的桩全清除。 7 本模块运行中的错误信息保存在可执行文件目录中的CppStub.log中。 8 本模块提供的打桩功能为覆盖桩。插入桩用得较少,不支持。 9 重载的函数的地址不能方便的得到,不能打桩。

  6. CppStub使用举例 //待测类: classCSimple { public: voidSimpleMethod(); voidParamMethod(inta); virtualvoidVirtualMethod(); }; //写的桩类:(不需要实现待测类的所有方法,不能从有虚函数的类派生,最好不要从任何类派生) classCSimpleStub { public: voidParamMethod_stub(inta) { g_bInStub = TRUE; } }; //测试代码: TEST(TestParamMethod) { CStubstub(P2ADDR(CSimple::ParamMethod), P2ADDR(CSimpleStub::ParamMethod_stub)); g_bInStub = FALSE; InvokeParamMethod(); // 它里面会调用CSimple的ParamMethod CHECK(TRUE == g_bInStub); }

  7. mockcpp Company Logo

  8. Thank You ! 测试工具是个流行事物,最近Google Test测试框架和Google mock也非常受欢迎。

More Related