在Codeblocks下配置GoogleTest单元测试工具
生活随笔
收集整理的這篇文章主要介紹了
在Codeblocks下配置GoogleTest单元测试工具
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
開發工具
我和我的組員的都是使用的是大一老師推薦的codeblocks,所以,就愉快的決定了工具統一為codeblocks,語言C++。
測試單元
老師推薦的是JUnit和VSTS工具,但同學們從大一到現在最熟悉的還是codeblocks編程軟件。既然的其他編程軟件能加載測試工具,我想,codeblocks也行,百度后發現googleTest支持codeblocks(我就說會有的。。)。那么接下來,是具體的配置過程。
工具下載
1. googleTest官網上最新版為1.8.0版本的,但我試了并不能成功Build,所以我這里給出1.7版本的。這里還需要下載cMake用來生成cbp文件讓codeBlocks識別。
工具下載地址:
https://pan.baidu.com/s/1uSu_TioPFOal6MYdM5Zp5A2.分別解壓兩個文件后,進入cmake文件夾的bin下,運行cmake-gui。
在“where is the source code”中選擇解壓后的googletest文件路徑,如我的路徑為 C:/Users/Administrator/Desktop/googletest-release-1.7.0/googletest-release-1.7.0 ,
然后在“where to build the binaries ”可選擇在解壓路徑下新建的一個文件夾路徑,如,我在googletest-release-1.7.0/下新建了一個“codeblocks-mingw”文件夾,所以路徑為
C:/Users/Administrator/Desktop/googletest-release-1.7.0/googletest-release-1.7.0/codeblocks-mingw
3. 然后點擊Configure按鈕,選擇 codeblocks-MinGw Makefs,選擇Use default native compiler,再點擊Finish
4. 回到主界面配置完成后勾選 gtest_disable_pthreads,再點擊Generate。
4.去到剛剛新建的codeblocks-mingw文件夾下,找到生成的gtest.cbp文件,雙擊就可進入codebloks中,然后點擊齒輪按鈕build成功即可。
---
配置codeblocks:
既想用C++11的新特征,又想順利編譯Google Test,你得用命令行參數-std=gnu++11,而不是-std=c++11。
1. 用codeblocks新建一個工程**
右鍵project,選擇Build options...清除Compiler settings > Compile Flags下與-std=有關的復選框點擊選項卡Compiler settings > Other options,在對話框中填寫-std=gnu++11
(如果沒有使用c++11新特性,上面兩步可以省略)
在Linker settings > Other linker options下填寫-lgtest
點擊OK
2. 點擊選項卡Search directories**
在Compiler子選項卡中Add一項,填寫解壓后的googleTest下的include文件夾路徑,如我的為 C:\Users\Administrator\Desktop\googletest-release-1.7.0\googletest-release-1.7.0\include
在Linker子選項卡中Add一項,填寫新建的文件夾路徑,我的為 C:\Users\Administrator\Desktop\googletest-release-1.7.0\googletest-release-1.7.0\codeblocks-mingw
### 3. 點擊OK
單元測試
然后我們可以新建工程測試自己的代碼了。記得加上必要的頭文件。面是我測試自己寫的判斷五子棋輸贏的函數的結果
#include <iostream> #include<cstdio> #include<gtest/gtest.h> #define WIN_Flag 100; #define INTERUPT -100; using namespace std;int ac[10][10]={ {0,0,1,0,0,0,0,0,0,0}, //0{0,0,-1,1,0,0,0,0,0,0}, //1{0,0,0,1,1,0,0,0,0,0}, //2{0,0,0,0,-1,-1,0,0,0,0}, //3{0,0,0,0,1,-1,0,0,0,0}, //4{0,0,0,1,0,1,-1,0,0,0}, //5{0,0,1,0,0,-1,0,0,0,0},{0,1,0,0,0,-1,0,0,0,0},{1,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0}};// 0 1 2 3 4 5 6 7 8 9int a[10][10]={0,0,1,0,0,0,0,0,0,0, //00,0,-1,1,0,0,0,0,0,0, //10,0,0,-1,1,0,0,0,0,0, //20,0,0,0,-1,-1,0,0,0,0, //30,0,0,0,0,-1,0,0,0,0, //40,0,0,0,0,1,-1,0,0,0, //50,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};int CheckLine(int a[10][10],int i,int j,int direction ,int key,int& value) {static int counter=1; if(i>=0&&i<10&&j>=0&&j<10){counter++;cout<<counter<<endl;if(counter==1)switch(direction){case 3:if(j>=2&&key*a[i][j-2]<0)value--;break;case 4:if(i>=2&&j>=2&&key*a[i-2][j-2]<0)value--;break;case 5:if(i>=2&&key*a[i-2][j]<0)value--;break;}if(counter==5){if(key>0)a[i][j]=direction;else a[i][j]=-1*direction;counter=1;return WIN_Flag;}if(key*a[i][j]>0){switch(direction){case 3:if(key>0) a[i][j]=direction;else a[i][j]=-1*direction;CheckLine(a,i,j+1,3,key,value);break;case 4:if(key>0) a[i][j]=direction;else a[i][j]=-1*direction;CheckLine(a,i+1,j+1,4,key,value);break;case 5:if(key>0) a[i][j]=direction;else a[i][j]=-1*direction;CheckLine(a,i+1,j,5,key,value);break;case 6:if(key>0) a[i][j]=direction;else a[i][j]=-1*direction;CheckLine(a,i+1,j-1,6,key,value);break;}}else {value--;counter=1;return INTERUPT;}}}int FlagToWin(int a[10][10]) { int i,j,value=2;for(i=0;i<10;i++)for(j=0;j<10;j++){switch(a[i][j]){case 1: case -1: if(CheckLine(a,i,j+1,3,a[i][j],value)==100)goto loop;if(CheckLine(a,i+1,j+1,4,a[i][j],value)==100)goto loop;if(CheckLine(a,i+1,j,5,a[i][j],value)==100)goto loop;if(CheckLine(a,i+1,j-1,6,a[i][j],value)==100)goto loop;break;case 3: case -3: if(CheckLine(a,i+1,j+1,4,a[i][j],value)==100)goto loop;if(CheckLine(a,i+1,j,5,a[i][j],value)==100)goto loop;if(CheckLine(a,i+1,j-1,6,a[i][j],value)==100)goto loop;break;case 4: case -4:if(CheckLine(a,i,j+1,3,a[i][j],value)==100)goto loop;if(CheckLine(a,i+1,j,5,a[i][j],value)==100)goto loop;if(CheckLine(a,i+1,j-1,6,a[i][j],value)==100)goto loop;break;case 5: case -5:if(CheckLine(a,i,j+1,3,a[i][j],value)==100)goto loop;if(CheckLine(a,i+1,j+1,4,a[i][j],value)==100)goto loop;if(CheckLine(a,i+1,j-1,6,a[i][j],value)==100)goto loop;break;case 6: case -6: if(CheckLine(a,i,j+1,3,a[i][j],value)==100)goto loop;if(CheckLine(a,i+1,j+1,4,a[i][j],value)==100)goto loop;if(CheckLine(a,i+1,j,5,a[i][j],value)==100)goto loop;break;}}loop:for(int p=0;p<10;p++){for(int q=0;q<10;q++)if(a[p][q]<0) cout<<"* ";else if(a[p][q]>0) cout<<"2 ";else cout<<"0 ";cout<<endl;} if(i<10&&j<10&&a[i][j]<0){i=0;cout<<"—————————THE Black IS The WINNER!!!——————————————"<<endl;} else if(i<10&&j<10&&a[i][j]>0){i=1;cout<<"—————————THE White IS The WINNER!!!——————————————"<<endl;} return i; } TEST (FlagToWin,HandleNoneZeroInput) {EXPECT_EQ(1,FlagToWin(ac));//輸出為1 白棋贏EXPECT_EQ(0,FlagToWin(a));//輸出為0 黑棋贏EXPECT_EQ(1,FlagToWin(a)); //錯誤參數測試} int main(int argc, char *argv[]){testing::InitGoogleTest(&argc,argv);return RUN_ALL_TESTS();cout<<FlagToWin(a);return 0; }這段代碼可看到我共寫了三個測試案例,其中兩個正確,一個錯誤。
其中,
EXCPECT_* 為失敗時,案例繼續往下執行;ASSERT_* 為失敗時,直接在當前函數中返回。“testing::InitGoogleTest(&argc, argv);” :gtest的測試案例允許接收一系列的命令行參數,因此,我們將命令行參數傳遞給gtest,進行一些初始化操作。gtest的命令行參數非常豐富,在后面我們也會詳細了解到。
“RUN_ALL_TESTS()” :運行所有測試案例
截圖為函數測試結果,綠色表示測試案例通過,錯誤案列情況由紅色文本提示.
參考博客
:http://www.cnblogs.com/TenosDoIt/p/3412721.html
http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html
轉載于:https://www.cnblogs.com/firstblogtoliukehong/p/8604243.html
總結
以上是生活随笔為你收集整理的在Codeblocks下配置GoogleTest单元测试工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2797:最短前缀 Trie
- 下一篇: linux 线程间传送消息,Linux