zoukankan      html  css  js  c++  java
  • gtest的Linux使用(Google test)

    GTest是Google开发的跨平台而且开源的C++单元测试框架,很好很强大。

    下载地址:https://code.google.com/p/googletest/ 。

    关于GTest在Windows下使用,CoderZh给出了十分详尽的使用指南:http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html 。

    我的工作环境:Ubuntu12.04, python 2.7, Makefile,SVN等

    • 一、下载gtest文件

    我用的是svn下载的。

    svn checkout http://googletest.googlecode.com/svn/trunk/ gtest-svn

    得到最新版的gtest,成功可以看到文件夹gtest-svn。

    • 二、生成gtest静态库

    先进入文件夹: 

    $cd  gtest-svn

    编译生成gtest-all.o文件(注意-I后无空格):

    $g++ -I./include -I./  -c ./src/gtest-all.cc

    再生成.a静态库文件:

    $ ar -rv libgtest.a gtest-all.o

    若成功,会在当前目录下生成libgtest.a库。可拷贝它到C++单元测试项目中去,以便使用。

    • 三、编写简单功能函数
    1. 新建一个项目(目录)GTestApp,包含两个代码文件: functions.h, functions.cpp。

    实现两个int变量的加减乘除功能。

    //functions.h
    #ifndef _FUNCTIONS_H
    #define _FUNCTIONS_H
    
    int add(int one,int two);
    int myMinus(int one,int two);
    int multiply(int one,int two);
    int divide(int one,int two);
    #endif
    //functions.cpp
    #include "functions.h"
    int add(int one,int two){
            return one+two;
    }
    int myMinus(int one,int two){
            return one-two;
    }
    int multiply(int one,int two){
            return one*two;
    }
    int divide(int one,int two){
            return one/two;
    }
    • 四、编写单元测试代码

    1、编写单元测试代码functionsTest.cpp

    //functionsTest.cpp
    #include "gtest/gtest.h"
    #include "functions.h"
    
    TEST(AddTest,AddTestCase){
            ASSERT_EQ(2,add(1,1));
    }
    TEST(MinusTest,MinusTestCase){
            ASSERT_EQ(10,myMinus(25,15));
    }
    TEST(MultiplyTest,MutilplyTestCase){
            ASSERT_EQ(12,multiply(3,4));
    }
    TEST(DivideTest,DivideTestCase){
            ASSERT_EQ(2,divide(7,3));
    }

    2、编写测试代码TestAll.cpp

    //TestAll.cpp
    #include "gtest/gtest.h"
    #include <iostream>
    using namespace std;
    
    int main(int argc,char* argv[])
    {
            //testing::GTEST_FLAG(output) = "xml:"; //若要生成xml结果文件
            testing::InitGoogleTest(&argc,argv); //初始化
            RUN_ALL_TESTS();                     //跑单元测试
            return 0;
    }
    • 五、编译与运行测试

    1、编译

    1) 复制gtest库文件

    在GTestApp目录下新建lib目录,并复制libgtest.a到其中。

    $mkdir lib

    $cp <the path>/libgtest.a lib

    2) 复制gtest头文件

    gtest1.6.0目录下的include包含了需使用到的头文件。把include复制到GTestApp中来。

    3)编译和链接

    $ g++ -o functions.o -c functions.cpp

    $ g++ -o functionsTest.o -c funciontsTest.cpp -I./include

    $ g++ -o TestAll.o -c TestAll.cpp -I./include

    链接:

    $ g++ -o main *.o -I./include -L./lib -lgtest -lpthread      #注意不是-libgtest,同时需要用到 libpthread这个库

    最后可以得到一个main的可执行文件

    2、运行与测试

    $./main

    [==========] Running 4 tests from 4 test cases.
    [----------] Global test environment set-up.
    [----------] 1 test from AddTest
    [ RUN ] AddTest.AddTestCase
    [ OK ] AddTest.AddTestCase (0 ms)
    [----------] 1 test from AddTest (1 ms total)

    [----------] 1 test from MinusTest
    [ RUN ] MinusTest.MinusTestCase
    [ OK ] MinusTest.MinusTestCase (0 ms)
    [----------] 1 test from MinusTest (0 ms total)

    [----------] 1 test from MultiplyTest
    [ RUN ] MultiplyTest.MultiplyTestCase
    [ OK ] MultiplyTest.MultiplyTestCase (0 ms)
    [----------] 1 test from MultiplyTest (1 ms total)

    [----------] 1 test from DivideTest
    [ RUN ] DivideTest.DivideTestCase
    [ OK ] DivideTest.DivideTestCase (0 ms)
    [----------] 1 test from DivideTest (3 ms total)

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

    如果需要得到xml文件的话,可以这么做

    首先先在main函数打开生成函数

    testing::GTEST_FLAG(output) = "xml:"; 

    再重新编译,生成main可执行文件。再执行下面操作。

    $ ./main --gtest_output=xml

    [==========] Running 4 tests from 4 test cases.
    [----------] Global test environment set-up.
    [----------] 1 test from AddTest
    [ RUN ] AddTest.AddTestCase
    [ OK ] AddTest.AddTestCase (0 ms)
    [----------] 1 test from AddTest (1 ms total)

    [----------] 1 test from MinusTest
    [ RUN ] MinusTest.MinusTestCase
    [ OK ] MinusTest.MinusTestCase (0 ms)
    [----------] 1 test from MinusTest (1 ms total)

    [----------] 1 test from MultiplyTest
    [ RUN ] MultiplyTest.MultiplyTestCase
    [ OK ] MultiplyTest.MultiplyTestCase (0 ms)
    [----------] 1 test from MultiplyTest (1 ms total)

    [----------] 1 test from DivideTest
    [ RUN ] DivideTest.DivideTestCase
    [ OK ] DivideTest.DivideTestCase (0 ms)
    [----------] 1 test from DivideTest (0 ms total)

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

    让我们再看下当前目录,用ls命令:可以看到有一个main.xml的文件,大功告成。

    本文参考:

    http://graybull.is-programmer.com/posts/37871.html

    http://www.cnblogs.com/coderzh/archive/2009/03/31/1426758.html

    https://code.google.com/p/googletest/

  • 相关阅读:
    vim发现交换文件
    Linux vim 一般模式(底线模式) 命令行模式 插入模式 记录2:
    linux的停止命令
    Linux centos7 常用命令 记录1:
    linux操作系统的关机命令
    linux解密shadow_Linux密码文件passwd和shadow分析
    mysql中root用户被忽略?
    Linux笔记01
    重装系统后恢复MySQL服务,Can't create test file C:ProgramDataMySQLMySQL
    重装JDK后,输入java -version报错:could not open " xxxxjvm.cf "
  • 原文地址:https://www.cnblogs.com/hcu5555/p/4468847.html
Copyright © 2011-2022 走看看