1.2 在VC 6.0/window下安裝(參考6)
a) 從官方網(wǎng)站上下載CppUnit的tar包并解壓到本地磁盤,比如D:CppUnit1.12.1
b) 編譯、安裝CppUnit庫。在VC中打開D:CppUnit1.12.1srcCppUnitLibraries.dsw,選擇“Build | BatchBuild...”,選中所有的項目,點擊build按鈕。在D:CppUnit1.12.1lib下生成所需要的所有庫文件。
c)在Visual C++中進行設(shè)置。告訴VC在哪里能找到CppUnit中的程序文件和庫文件:打開“Tools | Options...”,切換到'Directories'標簽頁,選擇'include files',添加D:CppUnit1.12.1include;切換到'libraries files'標簽頁,添加CPPUNITHOME/lib/;切換到'source files'標簽頁,添加D:CppUnit1.12.1srccppunit,保存。
d) 在測試代碼中進行設(shè)置。在VC中打開你寫的測試程序,啟動Project Settings對話框,切換到'C++'標簽頁,選擇'Code generation'項,對于release版,選擇'Multithreaded DLL',對于Debug版,選擇'Debug Multithreaded DLL'。同樣是在這個標簽頁,選擇'C++ langage'項,選擇All Configurations,選擇'enable Run-Time Type Information (RTTI)'。切換到'Link'標簽頁,在'Object/library modules'中添入需要的lib文件cppunitX.lib (debug模式為cppunitd.lib, release 模式為cppunit.lib )和testrunnerX.lib(debug模式為testrunnerd.lib, release 模式testrunner.lib,debug Unicode模式為testrunnerud.lib, release Unicode模式為testrunneru.lib)
e).添加系統(tǒng)路徑。為使測試程序在運行時能找到CppUnit提供的dll,我們在環(huán)境變量中指出CppUnit提供的dll的路徑:在我的電腦中,打開環(huán)境變量,編輯系統(tǒng)變量中的path變量,向其中添加CPPUNITHOMElib,從新啟動計算機,使設(shè)置生效。
1.3. 在Eclipse下安裝CppUnit
CppUnit配置到Eclipse平臺實際是通過項目中加入頭文件實現(xiàn)的,將CppUnit 的頭文件的目錄添加到編譯所用環(huán)境變量中.
1.4.在MinGW/Eclipse/window 下安裝
這個組合是為了在window的環(huán)境下使用gcc來編譯CppUnit的測試代碼。這里先簡單介紹一下MinGW.
1.4.1MinGW簡介
一個自由使用和自由發(fā)布的Windows特定頭文件和使用GNU工具集接口庫的集合,支持生成的windows程序而不需要借助第三方運行時庫。MinGW(MiniamalistGNU for Windows)是一些頭文件和接口庫的集合,該集合支持人們在沒有第三方動態(tài)鏈接庫的情況下使用GCC來生成Win32程序。在基本層上,MinGW是一組包含文件和接口庫,其功能是允許控制臺模式的程序使用MS標準C運行時庫(MSVCTR.dll)。通過基本運行時,gcc編寫的符合ANSI的控制臺模式的程序可以使用C運行庫擴展,MinGW的另一個組成部分W32API—是一組可以使用win32API的包含文件的和接口庫。
提到MinGW,必然想到Cygwin:Cygnus Solutions開發(fā)的自由軟件,嵌入式軟件的開發(fā)的流行。Cygwin改進了gcc,gdb,gas,使其能夠生成并解釋win32的目標文件,然后再把這些工具移植到window中,共享庫(基于win32API編寫了一個Unix系統(tǒng)庫的模擬層),Unix主機交叉編譯,逐步移植其他的工具。
在這個環(huán)境下安裝和在Linux安裝什么區(qū)別。
終于,所有的安裝事項都結(jié)束了,在進入理論前使用一個例子實踐一下。
2 CppUnit實例--來自參考[3]
/*Program:testcppunit.cpp -- a simple hellow example which use the cppunit tool*/
#include <iostream>
#include <cppunit/TestRunner.h>
#include <cppunit/TestResult.h>
#include <cppunit/TestResultCollector.h>
#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/BriefTestProgressListener.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
class Test : public CPPUNIT_NS::TestCase
{
CPPUNIT_TEST_SUITE(Test);
CPPUNIT_TEST(testHelloWorld);
CPPUNIT_TEST_SUITE_END();
public:
void setUp(void) {}
void tearDown(void) {}
protected:
void testHelloWorld(void) { std::cout << "Hello, world!" << std::endl; }
};
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
int main( int argc, char **argv )
{
// Create the event manager and test controller
CPPUNIT_NS::TestResult controller;
// Add a listener that colllects test result
CPPUNIT_NS::TestResultCollector result;
controller.addListener( &result );
// Add a listener that print dots as test run.
CPPUNIT_NS::BriefTestProgressListener progress;
controller.addListener( &progress );
// Add the top suite to the test runner
CPPUNIT_NS::TestRunner runner;
runner.addTest( CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest() );
runner.run( controller );
return result.wasSuccessful() ? 0 : 1;
}