这是我以前任项目经理时,编写的关于单元测试方面的作业指导书,针对多种开发环境叙述怎么进行单元测试以及环境配置,现在整理了一下。应该对大家有所帮助。
这是第一部分,主要针对C和C++项目的(包括了Windows环境和Linux环境),下部分将针对Java及J2EE项目。
1. 目的
为了减少代码中的错误数量, 减少调试所花的时间和精力, 改善软件质量, 减少开发和维护的时间和成本。
2. 适用范围
适用于C及C++的所有产品。
3. 适用内容
3.1 C++标准
3.1.1测试环境使用Visual C++,Windows窗口应用程序
3.1.1.1前题:使用CppUnit1.6.2版,解压后,路径为x://cppunit-1.6.2;
在工程文件中配置测试框架使用环境:加入执行头文件的路径x://cppunit-1.6.2/include,加入导入库文件的路径x://cppunit-1.6.2/lib;
配置DEBUG(测试)版环境:
加入需要链接的静态测试框模块testrunnercd.lib(运行测试用例的选择对话框)和cppunitcd.lib(测试框架);
加入测试Add-ins,库名为x://cppunit-1.6.2/lib/TestRunnerDSPlugInD.dll;
在Project Settings/C++/C++ Language中启用RTTI;
3.1.1.2建立测试用例:
1、以类名加前辍“Test”命名测试单元文件名,比如“CMabString”类的类文件名为MabString.cpp,则测试单元文件命名为TestMabString.cpp;
2、加入测试框架头文件以及要测试的单元头文件,以TestMabString为例:
头文件:testmabstring.h
<script>zmbbs=1;</script>
这是第一部分,主要针对C和C++项目的(包括了Windows环境和Linux环境),下部分将针对Java及J2EE项目。
1. 目的
为了减少代码中的错误数量, 减少调试所花的时间和精力, 改善软件质量, 减少开发和维护的时间和成本。
2. 适用范围
适用于C及C++的所有产品。
3. 适用内容
3.1 C++标准
3.1.1测试环境使用Visual C++,Windows窗口应用程序
3.1.1.1前题:使用CppUnit1.6.2版,解压后,路径为x://cppunit-1.6.2;
在工程文件中配置测试框架使用环境:加入执行头文件的路径x://cppunit-1.6.2/include,加入导入库文件的路径x://cppunit-1.6.2/lib;
配置DEBUG(测试)版环境:
加入需要链接的静态测试框模块testrunnercd.lib(运行测试用例的选择对话框)和cppunitcd.lib(测试框架);
加入测试Add-ins,库名为x://cppunit-1.6.2/lib/TestRunnerDSPlugInD.dll;
在Project Settings/C++/C++ Language中启用RTTI;
3.1.1.2建立测试用例:
1、以类名加前辍“Test”命名测试单元文件名,比如“CMabString”类的类文件名为MabString.cpp,则测试单元文件命名为TestMabString.cpp;
2、加入测试框架头文件以及要测试的单元头文件,以TestMabString为例:
头文件:testmabstring.h
#ifndef CPP_UNIT_TestNode_H #define CPP_UNIT_TestNode_H //包含测试框架的头文件 #include <cppunit/TestCase.h> #include <cppunit/extensions/HelperMacros.h> //包含被测试单元的头文件 #include "mabstring.h" //派生测试框架的测试用例类 class TestMabString : public CppUnit::TestCase { //定义测试用例列表,此列表将出现在运行测试用例的选择对话框中 CPPUNIT_TEST_SUITE( TestMabString ); CPPUNIT_TEST( FindByName ); CPPUNIT_TEST_SUITE_END(); protected: // CMabString m_MabStr; public: //用例初始化,可作为桩函数 void setUp (); //用例析构 void tearDown(); protected: //测试用例 void FindByName (void); }; #endif 类文件:testmabstring.cpp #include "TestMabString.h" #include "iostream.h" #include "strstrea.h" //注册本测试单元 CPPUNIT_TEST_SUITE_REGISTRATION( TestMabString ); //定义测试用例 void TestMabString::FindByName () { //功能性测试,属黑盒测试 //normal test //条件及错误测试,属白盒测试 //extra test, //例外测试,属白盒测试 //exception test, bool bRet=false; try{ //put the exception code here... } //catch(CXXX& e) catch(...) { bRet=true; } CPPUNIT_ASSERT(bRet); //由于并不能够执行所有单元测试应该执行的路径,比如CMabString是从CString //类中派生出来的,而可能CMabString中的Find只简单调用了CString中的Find方法,//所以并不需要测试; //在此处说明所有不用测试的路径; //other test, see the ... } void TestMabString::setUp () { //开始测试前的初始代码 m_pNode=new Node(); } void TestMabString::tearDown() { //测试结束代码 if(m_pNode) delete m_pNode; } |
<script>zmbbs=1;</script>