Author: surt
version 0.1
Eclipse除了可以以CDT開發C++程式之外,我們也可以在Eclipse下撰寫CppUnit的測試程式,其中關於CDT開發C++程式的部份,可以參考sungo的"[教學] Window+GCC+CDT用Eclipse開發C、C++"一文。而這份文件則是以撰寫CPPUnit為主。
OS:Windows XP Professional SP2
Version:Eclipse 3.0+CDT2.02+MinGW3.1.0
這份文件的前提是必須先安裝好Eclipse、CDT及MinGW這三個部份,由於會與之前的教學文件重複,故在此不再贅述。接下來即開始介紹整個步驟。
一、安裝Cygwin
請至http://www.cygwin.com/下載安裝程式
下載後請直接安裝,除了選擇站台及安裝方式外,均只要按下一步即可安裝完成。
安裝後請在各環境變數新增以下幾個參數
PATH: C:/cygwin/bin
LIBRARY_PATH :C:/cygwin/lib
均設定完後,即可以開始執行cygwin,如下圖,即出現類似Linux環境下的command mode
二、安裝CPPUnit
1. 下載CPPUnit請至http://sourceforge.net/projects/cppunit下載
目前最新的版本為1.10.2,下載後將其複製至C:/cygwin/home/surt的目錄下
並輸入如下指令以解壓縮為cppunit-1.10.2目錄
2. 接下來將準備編譯,以產生cppunit的lib檔,在這之前必須先修改MinGW中的一個Header檔,路徑為:C:/MinGW/include/winuser.h
在第3411行的部份,會有一個函式宣告為
主要是因為cygwin下並不直接支援Windwos的GDI函式,所以會在BLENDFUNCTION發生Error!我們只要把以上這行改成如下
3. 開始編譯cppunit,我們先切換至cppunit的目錄下,再執行configure指令作環境設定,指令如下所示
執行完,若無任何錯誤訊息即表示成功,接下來執行make指令,如下輸入
同樣地,若是沒有任何錯誤訊息,就表示已經編譯完成,且也產生lib了
三、以Eclipse撰寫測試程式 - 開啟HelloCPPUnitTest Project
1. 開啟Eclipse,然後【File】->【New】->【Project】
2. 在C++目錄下選擇『Standard Make C++ Project』後,按下【Next】
3. 接下來輸入Project Name為『HelloCPPUnitTest』後,按下【Next】
4. 在Binary Parser頁次將『Cygwin PE Parser』選項打勾後,按下【Finish】
四、以Eclipse撰寫測試程式 - 撰寫HelloTestCase
1. 在C/C++ Projects View選擇HelloCPPUnitTest按右鍵選擇【New】->【Other...】
2. 在C++目錄下選擇『Class』後,按下【Next】
3. Name部份輸入HelloTestCase後,按下【Finish】
4. 將HelloCPPUnitTest.h改成以下的code
5. 將HelloCPPUnitTest.cpp改成以下的code
五、以Eclipse撰寫測試程式 - 撰寫Test主程式(以TextRunner執行)
1. 新增一個名為main.cpp的檔案,內容為如下的程式碼:
六、以Eclipse撰寫測試程式 - 撰寫Makefile
1. 新增一個名為Makefile的檔案(不用副檔名),其內容如下:
2. 以上黃色的設定,依個人安裝cygwin及cppunit的路徑而有所不同,其中cppunit_lib為cppunit的library,而libtool為link的工具,而在compile時必須包含cppunit_config所定義的目錄,這些部份均是在編譯cppunit時產生的
七、編譯並執行
1. 編譯Project,【Project】->【Build Project】後,在Console View會產生以下訊息
2. 執行main.exe,選擇【Run】->【Run..】
3. 按下【New】,並將Name設定為『HelloCPPUnitTest』,OK的話就按下【Run】開始執行。執行後就會出現以下畫面:
version 0.1
Eclipse除了可以以CDT開發C++程式之外,我們也可以在Eclipse下撰寫CppUnit的測試程式,其中關於CDT開發C++程式的部份,可以參考sungo的"[教學] Window+GCC+CDT用Eclipse開發C、C++"一文。而這份文件則是以撰寫CPPUnit為主。
OS:Windows XP Professional SP2
Version:Eclipse 3.0+CDT2.02+MinGW3.1.0
這份文件的前提是必須先安裝好Eclipse、CDT及MinGW這三個部份,由於會與之前的教學文件重複,故在此不再贅述。接下來即開始介紹整個步驟。
一、安裝Cygwin
請至http://www.cygwin.com/下載安裝程式
下載後請直接安裝,除了選擇站台及安裝方式外,均只要按下一步即可安裝完成。
安裝後請在各環境變數新增以下幾個參數
PATH: C:/cygwin/bin
LIBRARY_PATH :C:/cygwin/lib
均設定完後,即可以開始執行cygwin,如下圖,即出現類似Linux環境下的command mode
surt@kurthsu ~
$
二、安裝CPPUnit
1. 下載CPPUnit請至http://sourceforge.net/projects/cppunit下載
目前最新的版本為1.10.2,下載後將其複製至C:/cygwin/home/surt的目錄下
並輸入如下指令以解壓縮為cppunit-1.10.2目錄
surt@kurthsu ~
$tar zxvf cppunit-1.10.2.tar.gz
2. 接下來將準備編譯,以產生cppunit的lib檔,在這之前必須先修改MinGW中的一個Header檔,路徑為:C:/MinGW/include/winuser.h
在第3411行的部份,會有一個函式宣告為
BOOL WINAPI UpdateLayeredWindow(HWND,HDC,POINT*,SIZE*,HDC,POINT*,COLORREF,BLENDFUNCTION*,DWORD);
主要是因為cygwin下並不直接支援Windwos的GDI函式,所以會在BLENDFUNCTION發生Error!我們只要把以上這行改成如下
#ifndef NOGDI
BOOL WINAPI UpdateLayeredWindow(HWND,HDC,POINT*,SIZE*,HDC,POINT*,COLORREF,BLENDFUNCTION*,DWORD);
#endif
3. 開始編譯cppunit,我們先切換至cppunit的目錄下,再執行configure指令作環境設定,指令如下所示
surt@kurthsu ~
$ cd cppunit-1.10.2
surt@kurthsu ~/cppunit-1.10.2
$ ./configure --disable-shared (表示取消shared library的編譯)
執行完,若無任何錯誤訊息即表示成功,接下來執行make指令,如下輸入
surt@kurthsu ~/cppunit-1.10.2
$ make
同樣地,若是沒有任何錯誤訊息,就表示已經編譯完成,且也產生lib了
三、以Eclipse撰寫測試程式 - 開啟HelloCPPUnitTest Project
1. 開啟Eclipse,然後【File】->【New】->【Project】
2. 在C++目錄下選擇『Standard Make C++ Project』後,按下【Next】
3. 接下來輸入Project Name為『HelloCPPUnitTest』後,按下【Next】
4. 在Binary Parser頁次將『Cygwin PE Parser』選項打勾後,按下【Finish】
四、以Eclipse撰寫測試程式 - 撰寫HelloTestCase
1. 在C/C++ Projects View選擇HelloCPPUnitTest按右鍵選擇【New】->【Other...】
2. 在C++目錄下選擇『Class』後,按下【Next】
3. Name部份輸入HelloTestCase後,按下【Finish】
4. 將HelloCPPUnitTest.h改成以下的code
#ifndef HELLOTESTCASE_H
#define HELLOTESTCASE_H
#include <cppunit/extensions/HelperMacros.h>
class HelloTestCase : public CPPUNIT_NS::TestFixture {
??CPPUNIT_TEST_SUITE( HelloTestCase );
??CPPUNIT_TEST( testHello );
??CPPUNIT_TEST_SUITE_END();
public:
??void testHello();
};
#endif // HELLOTESTCASE_H
5. 將HelloCPPUnitTest.cpp改成以下的code
#include "HelloTestCase.h"
void HelloTestCase::testHello() {
??CPPUNIT_ASSERT( 1 == 0 );
??CPPUNIT_ASSERT( 1 == 1 );
}
五、以Eclipse撰寫測試程式 - 撰寫Test主程式(以TextRunner執行)
1. 新增一個名為main.cpp的檔案,內容為如下的程式碼:
#include <cppunit/ui/text/TestRunner.h>
#include "HelloTestCase.h"
int
main( int argc, char* argv[] ) {
??CPPUNIT_NS::TextUi::TestRunner runner;
??runner.addTest( HelloTestCase::suite() );
??bool wasSuccessful = runner.run();
??
??return wasSuccessful ? 0 : 1;
}
六、以Eclipse撰寫測試程式 - 撰寫Makefile
1. 新增一個名為Makefile的檔案(不用副檔名),其內容如下:
cppunit_lib = C:/cygwin/home/surt/cppunit-1.10.2/src/cppunit/libcppunit.la
cppunit_config = C:/cygwin/home/surt/cppunit-1.10.2/config
objects = HelloTestCase.o Main.o
main : $(objects)
??bash /home/surt/cppunit-1.10.2/libtool --mode=link g++ -g -O2 /
??-o main.exe HelloTestCase.o Main.o ${cppunit_lib}
$(objects) : HelloTestCase.cpp Main.cpp
??g++ -DHAVE_CONFIG_H -I${cppunit_config} -g -O2 -MD -MP -c /
??HelloTestCase.cpp Main.cpp
all :
??${MAKE} main
2. 以上黃色的設定,依個人安裝cygwin及cppunit的路徑而有所不同,其中cppunit_lib為cppunit的library,而libtool為link的工具,而在compile時必須包含cppunit_config所定義的目錄,這些部份均是在編譯cppunit時產生的
七、編譯並執行
1. 編譯Project,【Project】->【Build Project】後,在Console View會產生以下訊息
make -k all
make main
make[1]: Entering directory `D:/OOP/Workspace/HelloCPPUnitTest'
g++ -DHAVE_CONFIG_H -IC:/cygwin/home/surt/cppunit-1.10.2/config -g -O2 -MD -MP -c /
HelloTestCase.cpp Main.cpp
bash /home/surt/cppunit-1.10.2/libtool --mode=link g++ -g -O2 /
-o main.exe HelloTestCase.o Main.o C:/cygwin/home/surt/cppunit-1.10.2/src/cppunit/libcppunit.la
g++ -g -O2 -o main.exe HelloTestCase.o Main.o C:/cygwin/home/surt/cppunit-1.10.2/src/cppunit/.libs/libcppunit.a
make[1]: Leaving directory `D:/OOP/Workspace/HelloCPPUnitTest'
2. 執行main.exe,選擇【Run】->【Run..】
3. 按下【New】,並將Name設定為『HelloCPPUnitTest』,OK的話就按下【Run】開始執行。執行後就會出現以下畫面:
.F
!!!FAILURES!!!
Test Results:
Run: 1 Failures: 1 Errors: 0
1) test: HelloTestCase::testHello (F) line: 4 HelloTestCase.cpp
assertion failed
- Expression: 1 == 0
上述的方式會有include而發生error,是因為環境變數少了cppunit的include的關係
最後的系統環境變數應如下所示:(以下變數均視其安裝方式而訂)
PATH: C:/MinGW/bin;C:/cygwin/bin
LIBRARY_PATH :C:/cygwin/lib;C:/MinGW/lib
C_INCLUDE_PATH :C:/MinGW/include
CPLUS_INCLUDE_PATH :C:/MinGW/include/c++/3.2.3;C:/MinGW/include/c++/3.2.3/mingw32;C:/MinGW/include/c++/3.2.3/backward;C:/MinGW/include;C:/cygwin/home/surt/cppunit-1.10.2/include