白盒测试-Gtest框架使用方式

         Gtest实战笔记

gtest的下载地址:

https://github.com/google/googletest

Ssh指令下载

首先需要下载 git

sudo apt-get install git

白盒测试-Gtest框架使用方式

 

 

 

 

 

 

 

白盒测试-Gtest框架使用方式然后下载

git clone https://github.com/google/googletest.git

 

 

然后上传服务器;

unzip googletest-release-1.10.0_2.zip  解压

chmod -R 777 /home/    给权限

cd googletest-release-1.10.0   进目录

sudo cmake CMakeLists.txt   编译

白盒测试-Gtest框架使用方式

 

sudo make

白盒测试-Gtest框架使用方式

 

 

 

 

 

 

原先的源码文件

 

白盒测试-Gtest框架使用方式

编译后

白盒测试-Gtest框架使用方式

 

 

会在lib目录下生成库文件:libgtest_main.a与libgtest.a

白盒测试-Gtest框架使用方式

 

 

把二者复制到/usr/local/lib/目录下:

sudo cp libgtest*.a /usr/local/lib

白盒测试-Gtest框架使用方式

 

给权限:

chmod -R 777 /usr/local/lib/

 

以上gtest编译完成,即可在服务器上创建gtest项目;

若创建项目后显示缺少<gtest/gtest.h>  责把googletest目录下linude复制到usr下linude

 

接下来在项目规范文件中创建测试列子目录;

mkdir unittest   创建目录指令

chmod -R 777 /home/   给权限

touch test.cpp创建.cpp文件

 

 

开始写代码

输入命令 : vim test.cpp (前提是你已经安装了vim文本编辑器)

进入编辑器后:输入英文字母”i”进入编辑模式

退出文本文档

按一下Esc ,然后按出”:”冒号

接着输入对应字母

输入字母 q 表示退出(既不保存你输入的代码直接退出)

输入字母 wq 表示保存并且退出

现在我们写一个小例子来试试。

test.cpp

#include <gtest/gtest.h>

int Foo(int a, int b)
{
if (a == 0 || b == 0)
{
throw “don’t do that”;
}
int c = a % b;
if (c == 0)
return b;
return Foo(b, c);

}

TEST(FooTest, HandleNoneZeroInput)
{
EXPECT_EQ(2, Foo(4, 10));
EXPECT_EQ(6, Foo(30, 18));
}

int main(int argc, char *argv[])

{

testing::FLAGS_gtest_death_test_style = “threadsafe”;

testing::InitGoogleTest(&argc, argv);

return RUN_ALL_TESTS();

}

 

 

编译:

g++ teststart.cpp -o test -Igtest/include -lgtest -lpthread

执行生成的test文件:

白盒测试-Gtest框架使用方式

执行:

./test

白盒测试-Gtest框架使用方式 白盒测试-Gtest框架使用方式

 

如果希望输出xml文件结果,再main函数中加入
testing::GTEST_FLAG(output) = “xml:”;
再重新编译,生成main可执行文件。运行./test –gtest_output=xml

 

 

以上为实测单元测试用例跑测程序;

以下是基本语法;

断言

基本断言

ASSERT_* 系列的断言, 当检查点失败时, 退出当前函数(注意: 并非退出当前案例).

 

EXPECT_* 系列的断言, 当检查点失败时, 继续往下执行.

 

 

基本的真/假条件断言。

 

 

ASSERT_TRUE(condition); EXPECT_TRUE(condition);         true

ASSERT_FALSE(condition); EXPECT_FALSE(condition);       false

 

 

比较两个值的断言。

 

ASSERT_EQ(val1,val2); EXPECT_EQ(val1,val2); val1 == val2

ASSERT_NE(val1,val2); EXPECT_NE(val1,val2); val1 != val2

ASSERT_LT(val1,val2); EXPECT_LT(val1,val2); val1 < val2

ASSERT_LE(val1,val2); EXPECT_LE(val1,val2); val1 <= val2

ASSERT_GT(val1,val2); EXPECT_GT(val1,val2); val1 > val2

ASSERT_GE(val1,val2); EXPECT_GE(val1,val2); val1 >= val2

 

 

字符串比较

该组中的断言比较两个C字符串的值。 如果要比较两个字符串对象,请改用EXPECT_EQ,EXPECT_NE和etc。

Fatal assertion                                    Nonfatal assertion                                     Verifies

ASSERT_STREQ(str1,str2);                 EXPECT_STREQ(str1,_str_2);                 两个C字符串的内容相同

ASSERT_STRNE(str1,str2);                 EXPECT_STRNE(str1,str2);                 两个C字符串的内容不同

ASSERT_STRCASEEQ(str1,str2); EXPECT_STRCASEEQ(str1,str2); 两个C字符串的内容相同,忽略大小写(忽略大小写)

ASSERT_STRCASENE(str1,str2); EXPECT_STRCASENE(str1,str2); 两个C字符串的内容不同,忽略大小写

 

 

对于使用TEST()定义的每个测试,表示独立测试模块

 

如:

TEST(ut_fileManager, parseLineToVector)   (参数:1.自定义文件名2.测试的函数名)

{

FileManager* fm = new FileManager;   //建立函数

 

vector<string> v;     //初始化

string st = “heroId,heroName,heroHp,heroAtk,heroDef,heroInfo”;   //给参数

// 测试函数运行是否正常

fm->parseLineToVector(st, v);  //调用

//ASSERT_EQ(v.at(0), “heroId”);  //给参数

}

 

对于使用TEST_F()定义的每个测试,

 

1.立即通过SetUp()初始化,

2.通过调用TearDown()清除

如:

class UT_fileManager : public ::testing::Test   //编写初始化类

{

protected:

void SetUp();   定义初始化

void TearDown();  定义清除

 

FileManager* fm;   建立函数

};

 

void UT_fileManager::SetUp()    //定义初始化函数

{

fm = new FileManager();

}

 

void UT_fileManager::TearDown()   // 释放

{

delete fm;

}

 

TEST_F(UT_fileManager, parseLineToVector)

{

vector<string> v;

string st = “heroId,heroName,heroHp,heroAtk,heroDef,heroInfo”;

fm->parseLineToVector(st, v);

 

ASSERT_TRUE(v);

}

 

 

对于使用TEST_P()定义的每个测试,可以带参数测试

如:测试// a = 1-10  b = 2-8

int add(int a, int b)

{

return a + b;

}

 

class TEST_ADD : public ::testing::TestWithParam<MyParam>  //建立类

{

}

 

INSTANTIATE_TEST_CASE_P(ADD_PARAM, TEST_ADD, testing::Values(MyParam(1, 2), MyParam(2, 3));    参数化宏定义

 

// a = 1-10  b = 2-8

TEST_P(TEST_ADD, ADD)      //给参数

{

MyParam mp = GetParam();

 

int a = mp.first;

int b = mp.second;

 

ASSET_EQ(add(a, b), a + b);

}

 

 

Test中的main函数:

如;

int main(int argc, char *argv[])

{

testing::FLAGS_gtest_death_test_style = “threadsafe”;

testing::InitGoogleTest(&argc, argv);

return RUN_ALL_TESTS();

}

 

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

点赞 (0)

全网最牛逼 白盒测试 白盒测试-Gtest框架使用方式 https://www.qwznb.com/324.html

上一篇:

已经没有上一篇了!

相关文章

评论
暂无评论