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/

  • 相关阅读:
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车按键启动和蜂鸣器报警
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车指定花式动作
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车指定花式动作
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车指定花式动作
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车前后左右综合实验
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车前后左右综合实验
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车前后左右综合实验
    asp中设置session过期时间方法总结
    asp中设置session过期时间方法总结
    ASP.NET关于Session_End触发与否的问题
  • 原文地址:https://www.cnblogs.com/hcu5555/p/4468847.html
Copyright © 2011-2022 走看看