gtest 自动化测试 部署

1.部署
a)编译框架
1.1下载gtest库1.6.0 并解压到文件夹 "/user/{user}/gtest.1.6.0"

下载地址:https://code.google.com/p/googletest/downloads/detail?name=gtest-1.6.0.zip&can=2&q=

1.2安装gcc 如果已有命令行操作,GCC跳过这个步骤

在mac下,我直接使用使用xcode4.6的扩展,操作是打开xcode ->preferences ->downloads->componnts 检查command line tools是否已安装,没有安装直接安装就行了

1.3把下面的脚本保存为 bash脚本并放到"/user/{user}/gtest.1.6.0",命名为 create.sh并运行脚本,成功后就会产生两个文件 (libgteste.a gtest-all.o)

g++ -I./include -I./ -c ./src/gtest-all.cc glib.o
ar -rv libgteste.a gtest-all.o

运行步骤:1)先打开终端运行 cd "/user/{user}/gtest.1.6.0"
2)再运行 create.sh

1.4创建运行环境

1)在目标机器上先创建一个部署的目录 "/user/{user}/utest"
2)再在创建好的文件目录下创建一个libs
3)把1.3运行后产生成的文件libgteste.a、gtest-all.o、以及gtest库文件中的include文件夹,src目录下的gtest_main.cc 一起放到上一步创建的libs中

b)编写脚本 (看附件run.sh)

创建测试脚本run.sh 放到到1.4.1创建的目录下与libs同一级("/user/{user}/utest")

c) 建立目标源码目录src 路径为 "/user/{user}/utest/src"

这个文件夹不是必须的,是用来放被测试的目标代码,将会在run.sh脚本中的 src_path变量指定,确保在运行脚本时能找到这个路径即可

d) 建立一个测试tests目录 "/user/{user}/utest/tests"
这个目标也不是必须的,用来存放测试代码,将会在run.sh脚本中的 src_tests变量指定,确保在运行脚本时能找到这个路径即可

2.编写测试

a)目标代码(直接使用下载库的sample1.cc sample1.h)并把这个文件放到src中(如果是其它位置,在run.sh脚本中指定src_path为到相应的位置)
b)测试用例(直接使用下载库中的sample1_unittest.h)并把这个文件放到tests中(如果是其它位置,在run.sh脚本中指定src_tests为到相应的位置)
c)测试用例编写看gtest教程
入门:https://code.google.com/p/googletest/wiki/V1_6_Primer
高级:https://code.google.com/p/googletest/wiki/AdvancedGuide

d)测试用例备注
a)代码清单:
测试目标代码 "/user/{user}/utest/src/sample1.h"
测试目标代码"/user/{user}/utest/src/sample1.cc"
测试用例 "/user/{user}/tests/tests/sample1_unittest.cc“

b)用例备注
1)测试目标代码 "/user/{user}/utest/src/sample1.h"
//声明两个函数
int Factorial(int n);
bool IsPrime(int n);

2)测试目标代码"/user/{user}/utest/src/sample1.cc"

//定义
#include "sample1.h"
#include <stdio.h>
#include <iostream>

//result = n!
int Factorial(int n) {
int result = 1;

for (int i = 1; i <= n; i++) {
result *= i;
}
//想要保持测试报告的可阅读性,请不要在程序中使用这样的日志
printf("inject messgae!");
std::cout<<"cout message"<<std::endl;
return result;
}

//模拟一个函数多个职责来测试不同的事件结果
bool IsPrime(int n) {
if (n <= 1) return false;
if (n % 2 == 0) return n == 2;

for (int i = 3; ; i += 2) {
if (i > n/i) break;

if (n % i == 0) return false;
}
return true;
}

3)测试用例 "/user/{user}/tests/tests/sample1_unittest.cc“

#include <limits.h>
#include "sample1.h"
#include "gtest/gtest.h" 引用测试框架头文件,因为我们在脚本中已设置好相应的路径关系,一定要按照这个路径来引用

//测试用例接口
//FactorialTest 测试用例名称, Negative 测试名称
TEST(FactorialTest, Negative) {
EXPECT_EQ(1, Factorial(-5)); //检查目标是输出是否与期望一致
EXPECT_EQ(1, Factorial(-1)); //检查目标是输出是否与期望一致
EXPECT_TRUE(Factorial(-10) > 0); //按范围来检查,为TRUE就通过,FALSH 就不通过
}

TEST(FactorialTest, Zero) {
EXPECT_EQ(1, Factorial(0));
}

TEST(FactorialTest, Positive) {
EXPECT_EQ(1, Factorial(1));
EXPECT_EQ(2, Factorial(2));
EXPECT_EQ(6, Factorial(3));
EXPECT_EQ(40320, Factorial(8));
}


TEST(IsPrimeTest, Negative) {
EXPECT_FALSE(IsPrime(-1));
EXPECT_FALSE(IsPrime(-2));
EXPECT_FALSE(IsPrime(INT_MIN));
}

TEST(IsPrimeTest, Trivial) {
EXPECT_FALSE(IsPrime(0));
EXPECT_FALSE(IsPrime(1));
EXPECT_TRUE(IsPrime(2));
EXPECT_TRUE(IsPrime(3));
}

TEST(IsPrimeTest, Positive) {
EXPECT_FALSE(IsPrime(4));
EXPECT_TRUE(IsPrime(5));
EXPECT_FALSE(IsPrime(6));
EXPECT_TRUE(IsPrime(23));
}

3.运行测试

a)运行测试,打开终端,先cd "/user/{user}/utest/src"
b)再运行 sh run.h 就会产生一个测试结果报告

4.测试报告
测试报告放在run.sh的的输出重定向位置,run.sh脚本是直接在控制如显示的,运行结果会在控制台中输出

===========start test============
[==========] Running 13 tests from 4 test cases.
[----------] Global test environment set-up.
[----------] 3 tests from FactorialTest
[ RUN ] FactorialTest.Negative
[ OK ] FactorialTest.Negative (0 ms)
[ RUN ] FactorialTest.Zero
[ OK ] FactorialTest.Zero (0 ms)
[ RUN ] FactorialTest.Positive
[ OK ] FactorialTest.Positive (0 ms)
[----------] 3 tests from FactorialTest (0 ms total)

[----------] 3 tests from IsPrimeTest
[ RUN ] IsPrimeTest.Negative
[ OK ] IsPrimeTest.Negative (0 ms)
[ RUN ] IsPrimeTest.Trivial
[ OK ] IsPrimeTest.Trivial (0 ms)
[ RUN ] IsPrimeTest.Positive
[ OK ] IsPrimeTest.Positive (0 ms)
[----------] 3 tests from IsPrimeTest (0 ms total)

[----------] 4 tests from MyString
[ RUN ] MyString.DefaultConstructor
[ OK ] MyString.DefaultConstructor (0 ms)
[ RUN ] MyString.ConstructorFromCString
[ OK ] MyString.ConstructorFromCString (0 ms)
[ RUN ] MyString.CopyConstructor
[ OK ] MyString.CopyConstructor (0 ms)
[ RUN ] MyString.Set
[ OK ] MyString.Set (0 ms)
[----------] 4 tests from MyString (0 ms total)

[----------] 3 tests from QueueTest
[ RUN ] QueueTest.DefaultConstructor
[ OK ] QueueTest.DefaultConstructor (0 ms)
[ RUN ] QueueTest.Dequeue
[ OK ] QueueTest.Dequeue (0 ms)
[ RUN ] QueueTest.Map
[ OK ] QueueTest.Map (0 ms)
[----------] 3 tests from QueueTest (0 ms total)

[----------] Global test environment tear-down
[==========] 13 tests from 4 test cases ran. (0 ms total)
[ PASSED ] 13 tests.


5.mac下的完整包请看附件【请通过邮箱 索要czjone@126.com】

转载于:https://www.cnblogs.com/czjone/p/3296761.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值