80 likes | 341 Views
单元测试和 CppStub 介绍. 2009 年 4 月. 陈国栋. 测试框架. 1. 打桩 /mock 工具. Mockcpp 简介. 2. 4. CppStub 介绍. 3. 3. 目录. 2. 1. UnitTest++ : 开源的一个轻量级的 CppUnit ,非常小巧而容易使用 . 缺陷: 无法在被测类中声明测试类 / 函数为它的友元。. CppUnit: 使用最广泛 . 只能在被测类中声明测试类 / 函数为它的友元,才能访问被测类的私有成员。 ( 还是要为了测试改变正式代码,有更好的方法吗? ). 测试框架.
E N D
单元测试和CppStub介绍 2009年4月 陈国栋
测试框架 1 打桩/mock工具 Mockcpp简介 2 4 CppStub介绍 3 3 目录
2 1 UnitTest++: 开源的一个轻量级的CppUnit,非常小巧而容易使用. 缺陷:无法在被测类中声明测试类/函数为它的友元。 CppUnit: 使用最广泛. 只能在被测类中声明测试类/函数为它的友元,才能访问被测类的私有成员。(还是要为了测试改变正式代码,有更好的方法吗?) 测试框架 #include <UnitTest++.h> TEST(TestCaseName) { int ret = TestFunction(); CHECK(ret ==OK); } Company Logo
支持C函数打桩的工具,xxx也做过一些利用到vxWorks下的研究。支持C函数打桩的工具,xxx也做过一些利用到vxWorks下的研究。 Stub CppStub Amop Mockcpp XXX 陈国栋 开源 开源 Mock与打桩工具 支持C/C++全局函数/类非虚成员函数打桩的工具。 支持C++虚成员函数Mock(打桩)的工具。 支持C/C++的Mock(打桩)工具。试验中。
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 重载的函数的地址不能方便的得到,不能打桩。
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); }
mockcpp Company Logo
Thank You ! 测试工具是个流行事物,最近Google Test测试框架和Google mock也非常受欢迎。