zoukankan      html  css  js  c++  java
  • CLion之C++框架篇-优化框架,单元测试(二)

    背景
     
      结合上一篇CLion之C++框架篇-安装工具,基础框架的搭建(一),继续进行框架优化!
     
      googletest(GTest)是Google开源的C++测试框架,与CLion组合,对C++环境开发真算得上是双剑合璧。
     
      我的目标是在CLion工程中集成GTest,进行框架优化。
     
     
    安装GTest
     
      源码位置:https://github.com/google/googletest
      下载地址为:https://github.com/google/googletest/archive/master.zip
      
      放置到对应的工程目录下面,如图:  
     
    优化我的CMakeLists.txt
     

    详细代码:

    cmake_minimum_required(VERSION 3.8)
    
    project(work)
    
    message("------------ Options -------------")
    message("  CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
    message("  CMAKE_BUILD_TYPE: Hello World!")
    
    # 编译google test,会在当前目录生成libtest.a静态库
    add_subdirectory(./googletest)
    #头文件
    include_directories(${PROJECT_SOURCE_DIR}/src/include ./googletest/include)
    
    #源文件
    aux_source_directory(${PROJECT_SOURCE_DIR}/src/main dir_srcs)
    #库文件 : libtest.a 添加到链接路径中
    link_directories(${PROJECT_SOURCE_DIR}/lib ${PROJECT_SOURCE_DIR}/googletest)
    
    #需要添加googletest运行需要的pthread
    set(LIBRARIES pthread)
    
    #编译器相关设置
    set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_CXX_COMPILER      "clang++" )         # 显示指定使用的C++编译器
    set(CMAKE_CXX_FLAGS   "-g")                     # 调试信息
    set(CMAKE_CXX_FLAGS   "-Wall")                  # 开启所有警告
    set(WORK ${dir_srcs})
    
    add_custom_target(cmake-build-debug)
    add_executable(${PROJECT_NAME} ${WORK})
    
    target_link_libraries(${PROJECT_NAME} gtest)
    

      

     
     做个简单的测试
     
    case:字符串去掉空格处理
     
     
     优化框架
     

    思路:日常使用中,建议把这些代码放置到每个实现函数文件中,然后通过宏去控制!

    1、公共文件common.h

    代码如下:

    //
    // Created by Zhou,Baochuan on 18/5/25.
    //
    #ifndef WORK_COMMON_H
    #define WORK_COMMON_H
    #include <iostream>
    #include <string>
    
    #define ENV_DEBUG
    #ifdef ENV_DEBUG
    #include <gtest/gtest.h>
    #endif
    
    using namespace std;
    
    #endif //WORK_COMMON_H
    

      

    2、实现文件,如字符串工具类:string_util.cpp

    代码如下:

    //
    // Created by Zhou,Baochuan on 18/5/25.
    //
    #include <iostream>
    #include "string_util.h"
    
    using namespace work;
    using namespace std;
    
    string StringUtil::ltrim(string str)
    {
        string chars = "	
    vf
     ";
        str.erase(0, str.find_first_not_of(chars));
        return str;
    }
    
    
    string StringUtil::rtrim(string str)
    {
        string chars = "	
    vf
     ";
        str.erase(str.find_last_not_of(chars) + 1);
        return str;
    }
    
    string StringUtil::trim(string str)
    {
        return ltrim(rtrim(str));
    }
    
    #ifdef ENV_DEBUG
    TEST(string_util, trim)
    {
        string src1 = " 空格校验 ";
        string src2 = StringUtil::trim(src1);
        EXPECT_STREQ("空格校验", src2.c_str());
        EXPECT_STREQ("空格校验 ", src2.c_str());
    }
    #endif
    

      

    3、入口文件

     代码如下:

    #include "common.h"
    #include "string_util.h"
    
    
    using namespace work;
    #ifndef ENV_DEBUG
    int main(int argc, char** argv) {
        string src = " OK";
        cout << StringUtil::trim(src) << endl;
        return 0;
    }
    
    #else
    GTEST_API_ int main(int argc, char ** argv) {
        testing::InitGoogleTest(&argc, argv);
        return RUN_ALL_TESTS();
    }
    #endif
    

      

    4、上线的时候,把这个common.h文件中的定义删除掉,如图:

    5、运行部分样例,如图:

     

     
     资源分享
     
      优化后-框架代码:https://github.com/rtxbc/cplus/tree/master/work
      
      googletest 说明文档(源代码的docs目录里有说明)
     
      翻译后文档:http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html
     
     
     
    推荐
  • 相关阅读:
    (转载)正向代理与反向代理的区别
    Java设计模式系列之装饰者模式
    工作中使用到的技术和工具分享
    Springboot+mybatis整合
    云计算入门和实践
    tesseract系列(1) -- tesseract用vs编译成库
    nodepad++ 让所有的加号收缩折叠展开的快捷键
    tesseract系列(4) -- tesseract训练问题总结
    tessereact的链接收藏
    菜鸟cmake使用
  • 原文地址:https://www.cnblogs.com/baochuan/p/9113145.html
Copyright © 2011-2022 走看看