开发工具

我和我的组员的都是使用的是大一老师推荐的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. pyQt5不让进度条卡住

    这里我们用一个更新程序做示例, 下载文件的过程中让进度条实时显示下载进度. 如果下载和更新进度条的工作都放在一个线程中,会出现进度条卡顿的情况. Qt中正确的做法是把界面刷新和工作任务交给不同的线程去 ...

  2. Acitivity(活动)

    1.首先活动是放在返回栈中. 2.活动的生命周期

  3. 安装 python pip Django

    python 安装 1. 官网下载:以 window 为例,按提示下载,版本号根据实际需求选择: 2. 选择路径,安装完成后,命令行输入 python 检测是否安装成功,下图为安装成功显示:quit( ...

  4. .NET Core----zipkin链路追踪使用

    本文主要是说明core怎么使用链路追踪 一.添加nuget包 二.在Startup中添加配置 /// <summary> /// 注册zipkinTrace /// </summar ...

  5. MAC本apache+php配置虚拟域名时踩的坑

    昨天在调试Mac自带的Apache+PHP配置域名时,调试的让我怀疑人生.顿时心里一万个草泥马,我就是配置个虚拟域名啊,这么让我受伤 . 1 首先检查一下Apache是否开启, qutao@bogon ...

  6. js变量传递

    基本类型.引用类型 基本类型: undefined.Null.Boolean.Number.String五种 (简单的数据段);引用类型: object (由多个值构成). 两种类型在使用上的区别: ...

  7. JSONP方法简单封装

    function myJsonp(url, data, callback) { //参数判断 if (Object.prototype.toString.call(data) == "[ob ...

  8. 2-1、FileBeat入门

    FileBeat入门 要开始使用Filebeat设置,请安装并配置相关产品: 用于存储和索引数据的Elasticsearch. 用户界面的Kibana. 用于解析和增强数据的Logstash(可选). ...

  9. php 获取用户的IP、地址、来源

    js方法获取用户的 ip 和 地址 <script src="http://pv.sohu.com/cityjson?ie=utf-8"></script> ...

  10. python数据类型之基础进阶

    一: 解构 1.1 结构字符串 变量和字符个数必须严格一致 name = 'wc' a,b=name print(a) print(b) # w # c name = 'w' a,b=name pri ...