开发工具

我和我的组员的都是使用的是大一老师推荐的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 9 int a[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,0,-1,0,0,0,0, //4
0,0,0,0,0,1,-1,0,0,0, //5
0,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

在Codeblocks下配置GoogleTest单元测试工具的更多相关文章

  1. windows 下 wamp php单元测试工具PHPUnit的安装

    phpunit下载网站 http://www.phpunit.cn/ 一.安装PHPUnit 1.选择版本 我用的是php版本是5.6.25 所以我选择的是PHPUnit 5.7 2.安装过程 为 P ...

  2. Windows下配置使用 MemCached

    Windows下配置使用MemCached 工具: memcached-1.2.6-win32-bin.zip     MemCached服务端程序(for win) Memcached Manage ...

  3. codeblocks+Mingw 下配置开源c++单元测试工具 google test

    google test 是google的c++开源单元测试工具,chrome的开发团队就是使用它. Code::Blocks 12.11(MinGW 4.7.1) (Windows版)Google T ...

  4. Centos下配置单元测试工具gtest

    gtest是google提供的一个非常强大的单元测试工具,下载地址:https://code.google.com/p/googletest 我下载的是gtest-1.6.0.拷贝到Centos系统上 ...

  5. Android studio下gradle Robolectric单元测试配置

    android studio下gradle Robolectric单元测试配置 1.Robolectric Robolectric是一个基于junit之上的单元测试框架.它并不依赖于Android提供 ...

  6. windows下搭建及配置mantis缺陷管理工具

    在windows XP 操作系统下,如何更快.更容易地搭建及配置mantis缺陷管理工具呢?以下是我实践的具体步骤: 一.安装mantis的前提环境,需要先安装Apache HTTP Server2. ...

  7. Maven的安装配置及初次创建项目与java单元测试工具JUnit

    Maven  安装     1.把maven安装包解压到某个位置     2.配置M2_HOME环境变量指向这个位置 3.在path环境变量中添加;%M2_HOME%\bin 配置镜像 国内的阿里云镜 ...

  8. 单元测试工具之Xunit

    在.NET开发中的单元测试工具之——xUnit.Net  原始出处 http://zhoufoxcn.blog.51cto.com/792419/1172320 在上一篇<在.NET开发中的单元 ...

  9. 一种数据与逻辑分离的Python单元测试工具

    一种数据与逻辑分离的Python单元测试工具 几个概念 TestCase TestCase是一个完整的测试单元,最小的测试执行实体,就是我们常说的测试用例. TestSuite 以某种特性将测试用例组 ...

随机推荐

  1. Win2012 R2安装 mysql8.0

    1.官网下载安装 官网上面写着x86,其实是兼容x64和x86的,下载安装就行 2.安装navicat 3.navicat连接mysql的时候出现错误 client does not support ...

  2. java界面--WePush-master 项目跑起来 -碰到的问题

    仅能在IntelliJ里面打开GUI Form文件来进行界面的拖拽设计--eclipse中也可以了 当eclipse 打开.form文件时,提示有.对应的编辑工具可以打开它,请到市场去安装 但是:本人 ...

  3. python捕获异常及方法总结

    调试Python程序时,经常会报出一些异常,异常的原因一方面可能是写程序时由于疏忽或者考虑不全造成了错误,这时就需要根据异常Traceback到出错点,进行分析改正:另一方面,有些异常是不可避免的,但 ...

  4. 2018-2019-2 网络对抗技术 20165231 Exp3 免杀原理与实践

    实践内容(3.5分) 1.1 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分),veil-evasion(0.5分),加壳工具(0.5分),使用shellcod ...

  5. static关键字特点

    目录 static关键字特点 静态代码块 static修饰与非static修饰的区别 static关键字特点 随着类的加载而加载 static修饰的变量和方法都会放在方法区中静态区,是属于类的. 静态 ...

  6. 正则表达式匹配日期,支持闰年,格式为YYYYMMDD

    年份:[\d]{4} 带31的月份:(0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])) 非2月不带31日的月份:((0[469])|11)((0[1-9])| ...

  7. 【easy】671. Second Minimum Node In a Binary Tree

    Given a non-empty special binary tree consisting of nodes with the non-negative value, where each no ...

  8. Elastichsearch实践——基本使用

    官网文档:https://www.elastic.co/guide/cn/elasticsearch/guide/current/getting-started.html es中的索引.类型.文档可以 ...

  9. HBuilderx中编译sass文件

    安装scss/sass编译插件 工具 -> 插件安装 -> scss/sass编译插件 将sass编译成css 新建scss文件,编写完成后,(右键scss文件 -> 外部命令/插件 ...

  10. 网络流24题——骑士共存问题 luogu 3355

    题目描述:这里 从这里开始,我们涉及到了一个新的问题:最小割问题 首先给出一些定义(本人根据定义自己口胡的): 一个流网络中的一个割是一个边集,使得割掉这些边集后源点与汇点不连通 而最小割问题就是一个 ...