目前,CPPUnit在WIN32平台下仅支持Microsoft Visual C++,而且你的VC++编译器至少应该是6.0版本的。
使用GUI TestRunner编译运行示例程序的步骤如下:
在VC++中打开examples/examples.dsw(包含所有的示例)
将HostApp设为active project
编译之
在VC中选择Tools/Customize.../Add-ins and Macro Files,点击Browse...
选择lib/TestRunnerDSPlugIn.dll文件,并按ok以注册该附加件(add-ins)
运行project
[Project创建结果]
框架 & 工具:
cppunit(cppunit.lib):单元测试的框架库,你将用它来编写单元测试。
cppunit_dll(cppunit_dll.dll/lib):同上,只是以DLL方式呈现。
TestRunner(testrunner.dll):一个MFC的扩展DLL,用来以GUI方式运行单元测试和查看结果。
DSPlugIn(lib/TestRunnerDSPlugIn.dll):一个VC++的附加件,为testrunner.dll所使用。有了它之后,你若在MFC TestRunner中双击某个failure,就会启动VC++,打开failure所在文件并定位到某行。
TestPlugInRunner:(警告:实验性的)一个VC++应用程序,用以运行测试插件。测试插件就是一个公开特定接口的DLL。该应用程序目前尚未完成(auto-reload特性丢失)。
所有库文件都被置于lib/目录下。
[示例]
CppUnitTestMain:一个实际的测试包(testsuite)用来测试CppUnit。使用了TextTestRunner(文本方式的单元测试环境),利用CompilterOutputter进行post-build testing(即在编译结束之后紧跟着进行测试)。在配置中设定连接了cppunit的静态库和动态库。
CppUnitTestApp:包含了与CppUnitTestMain相同的测试包,但使用了MFC TestRunner(GUI方式的单元测试环境)
hierarchy : 一个演示如何子类化测试的例子(你也许更愿意使用HelperMacros.h以及宏CPPUNIT_TEST_SUB_SUITE,这种方式更为简洁清晰。本示例已经很久没有更新了)。
HostApp : 一个用MFC TestRunner演示各种失败测试的例子。也演示了MFC Unicode TestRunner。
TestPlugIn : 一个演示如何为TestPlugInRunner编写TestPlugIn的例子(实验性的).
[配置(Configuration)]
CppUnit和TestRunner带有3种配置。
Release():多线程DLL,release模式
Debug(d):Debug多线程DLL,debug模式
Unicode Release(u):Unicode多线程DLL,release模式
Unicode Debug(ud):Unicode Debug 多线程DLL,debug模式
Debug Crossplatform (cd): Debug 多线程DLL,没有使用type_info从类名中提取测试用例的包名。
对CppUnit而言,当创建dll时,字母“dll” 将被添加到后缀之后。
括号内的字母标明了添加到库名之后的后缀。例如,debug配置的cppunit静态库名为cppunitd.lib。debug配置的cppunit动态库名为cppunitd_dll.lib.
[创建(Building)]
在VC++中打开src/CppUnitLibraries.dsw工作区文件。
将TestPlugInRunner设为active project。
在'Build'菜单中选择'Batch Build...'
在Batch Build对话框中,选中所有的project 并按下build按钮。
所有的库文件可以在lib/目录下找到。
测试(Testing)]
打开工作区文件examples/Examples.dsw。
将CppUnitTestApp设为active project.
为你要创建的库选择合适的配置。
编译运行project。TestRunner GUI将会出现。
[库(Libraries)]
所有编译后生成的库均可在'lib'目录中找到。多数库可以在src/CppUnitLibraries.dsw工作区中创建。
lib\:
cppunit.lib : CppUnit静态库“Multithreaded DLL”
cppunitd.lib : CppUnit静态库“Debug Multithreaded DLL”
cppunit_dll.dll : CppUnit动态库(DLL)“Multithreaded DLL”
cppunit_dll.lib : CppUnit动态导入库“Multithreaded DLL”
cppunitd_dll.dll : CppUnit动态库(DLL)“Debug Multithreaded DLL”
cppunitd_dll.lib : CppUnit动态导入库“Debug Multithreaded DLL”
qttestrunner.dll : QT TestRunner动态库(DLL)“Multithreaded DLL”
qttestrunner.lib : QT TestRunner导入库“Multithreaded DLL”
testrunner.dll : MFC TestRunner动态库(DLL)“Multithreaded DLL”
testrunner.lib : MFC TestRunner导入库“Multithreaded DLL”
testrunnerd.dll : MFC TestRunner动态库(DLL)“Debug Multithreaded DLL”
testrunnerd.lib : MFC TestRunner导入库“Debug Multithreaded DLL”
testrunneru.dll : MFC Unicode TestRunner动态库(DLL)“Multithreaded DLL”
testrunneru.lib : MFC Unicode TestRunner导入库“Multithreaded DLL”
testrunnerud.dll : MFC Unicode TestRunner动态库(DLL)“Debug Multithreaded DLL”
testrunnerud.lib : MFC Unicode TestRunner导入库“Debug Multithreaded DLL”
TestRunnerDSPlugIn.dll : 注册到你的VC++中的附加件。
注意:当你使用CppUnit DLL(cppunit*_dll.dll)时,你必须连接相关的导入库,并在project中定义预处理标识CPPUNIT_DLL。
[使用CppUnit]
编写单元测试:
为了编写单元测试,你需要连接cppunitXX.lib,此处的XX即所选配置对应的后缀字母。 你必须在你的project中打开RTTI开关(Project Settings/C++/C++ Language)。 CppUnit的include目录必须包含在include查找路径中。你可以通过在Project Settings/C++/Preprocessor/Additional include directories或者Tools/Options/Directories/Include中添加include目录做到这一点。
简言之:
打开RTTI开关
连接lib/cppunitXX.lib
include/ 必须包含在include查找路径中
使用TestRunner GUI:
为了使用GUI的test runner,你需要连接testrunnerXX.lib和cppunitXX.lib,此处的XX即所选配置对应的后缀字母。 你必须在你的project中打开RTTI开关。 文件testrunner.dll必须位于你的应用程序所在的路径(Debug或Release目录,project的dsp文件所在目录,或环境变量PATH中所指定的目录)。 一个最简单的办法是,要么添加一个post-build命令,或者,将位于lib/目录下的testrunner.dll添加到你的project中来,并定制创建步骤,将dll文件拷贝到你的“中间结果”目录(通常是Debug或Release目录)。
因为TestRunner GUI是一个MFC的扩展DLL,它能够访问当前应用程序的CWinApp。 参数设置将使用应用程序的注册键。这意味着,设置项“最近使用的测试”对每个应用程序而言都是不同的。
简言之:
打开RTTI开关
连接lib/cppunitXX.lib和lib/testrunnerXX.lib
include/必须包含在include查找路径中
为了运行你的project,lib/testrunnerXX.dll必须可用
使用DSPlugIn:
你必须在VC++中注册该插件。在Tools/Customize/Add-ins and Macro files中点击browse,并选择lib/TestRunnerDSPlugIn.dll(你可以注册release版或者debug版,都能运行)。
若VC++正在运行,当你双击一个failure后,VC++将打开相关文件并定位到出错行。
使用Test Plug In Runner:
你的DLL必须导出(export)一个函数,该函数实现了在include/msvc6/testrunner/TestPlugInInterface.h中所定义的接口。作为范例,参见examples/msvc6/TestPlugIn/TestPlugInInterfaceImpl.*。注意:该runner仍处于实验阶段并未作足够多的测试。