日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在Codeblocks下配置GoogleTest单元测试工具

發布時間:2023/12/10 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在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_TioPFOal6MYdM5Zp5A

2.分別解壓兩個文件后,進入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单元测试工具的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。