gtest日志在工程项目中的应用
网上有各种gtest的入门教学,这里就不一一重复了。本文的目的是讲解如何将gtest应用于工程应用中。利用测试驱动开发这样的理论,来先写测试代码,当自动化测试跑通以后,主工程的代码也就编写完了。
这里假设你已经在linux上成功编译gtest,并且将静态文件放置于某地。
头文件置于:~/build-env/build-system/3rd-soft/include/googletest1.8.0/include
静态库置于:~/build-env/build-system/3rd-soft/lib
首先我们做一个测试工程gtest-demo,其中生成src目录,用于演示一个字符串转数字,数字转字符串的简单代码
代码如下:main.cpp
#include "string_util.h"
#include <iostream>
int main(int argc, char* argv[])
{
string str = StringUtil::int_to_str();
cout<<"str="<<str<<endl;
int num = StringUtil::str_to_int("");
cout<<"num="<<num<<endl;
return ;
}
然后编写一个简单的Makefile文件
.PHONY: default force
SYSNAME=$(shell uname -s)
ifeq ($(SYSNAME),Darwin)
ECHO=echo
else
ECHO=echo -e
endif
CXX = g++
CFLAGS = -pg -Wall -std=c++0x
PROGRAM_NAME=AS
PROGRAM_NAME_CN=gtest测试模块
# TODO: 这里加入所有默认需要编译的目标
TARGETS=main
default: $(TARGETS)
# 全局的编译和链接选项都放在这儿
# 编译过程
%.o : %.cpp
$(CXX) -c $(CFLAGS) $< -o $@
# 下面是每个目标的生成过程
force:
# 程序的生成过程 {{{
SOURCES = $(wildcard *.cpp )
OBJECTS = $(patsubst %.cpp,%.o,$(SOURCES))
$(TARGETS): $(OBJECTS)
$(CXX) $(OBJECTS) -o $(TARGETS)
# }}}
install:
clean:
rm -f *.o
rm -f $(TARGETS)
运行make后生成可执行程序,
这样一个简单的c++的主工程框架便完成了。
根据测试驱动开发的理论,最好在写主工程代码时有一个自动测试框架的用例可以先跑一下。一旦这个测试用例跑完后没有报错,则主工程的代码也就编写完了,并且确保编写的代码是正确的。
以当前主工程代码来看,需要先验证
StringUtil::int_to_str(34)==”34”
StringUtil::str_to_int("100")==100
我们可以先实现接口,然后运行gtest单元测试
接口程序如下: string_util.h
#ifndef _COMMON_STRING_UTILITY_H_
#define _COMMON_STRING_UTILITY_H_
#include <string>
using namespace std;
class StringUtil
{
public:
StringUtil(void);
~StringUtil(void);
static string int_to_str(int num);
static int str_to_int(const string& str);
};
#endif
string_util.cpp
#include "string_util.h"
#include <iostream>
#include <sstream>
StringUtil::StringUtil(void)
{
}
StringUtil::~StringUtil(void)
{
}
string StringUtil::int_to_str(int num)
{
return "";
}
int StringUtil::str_to_int(const string& str)
{
return ;
}
然后写测试程序代码:test_string_util.cpp
#include <string>
#include "gtest/gtest.h"
#include "../src/string_util.h"
using namespace std;
class test_string_util : public ::testing::Test
{
};
TEST_F(test_string_util, int_to_str)
{
string str = StringUtil::int_to_str();
EXPECT_STREQ("", str.c_str());
}
TEST_F(test_string_util, str_to_int)
{
int num = StringUtil::str_to_int("");
EXPECT_EQ(num, );
}
编译后一运行:截图如下:

测试的提示信息很清晰,因此我们去修改int_to_str和str_to_int两个接口
如下代码所示:
string StringUtil::int_to_str(int num)
{
std::stringstream stream;
stream << num;
return stream.str();
}
int StringUtil::str_to_int(const string& str)
{
int num = atol(str.c_str());
return num;
}
然后再跑测试用例,截图如下:

至此,测试通过。回到主工程编译运行,发现已得到我们要的打印结果:

具体代码已上传到github上:https://github.com/luhouxiang/gtest-demo
gtest日志在工程项目中的应用的更多相关文章
- 解决tomcat下面部署多个项目log4j的日志输出会集中输出到一个项目中的问题
在一次项目上线后,发现了一个奇怪的问题,经过对源码的阅读调试终于解决,具体经过是这样的: 问题描述:tomcat7下面部署多个项目,log4j的日志输出会集中输出到一个项目中,就算配置了日志文件的绝对 ...
- Log4Net的应用教程之保存日志到数据库中
关于Log4Net的应用,网上有很多教程,但大多数都是拷贝复制,有些按照他的代码来,运行起来发现也出不来效果,但是Log4net的作用实在是非常大的,或者这里说的不对,应该说系统的日志功能是很重要的也 ...
- filebeat收集日志到elsticsearch中并使用ingest node的pipeline处理
filebeat收集日志到elsticsearch中 一.需求 二.实现 1.filebeat.yml 配置文件的编写 2.创建自定义的索引模板 3.加密连接到es用户的密码 1.创建keystore ...
- kettle作业(job)调用转换,设置变量,写日志到数据库中【转】
首先建立转换:从数据库表到日志 表输入的设置: 日志设置: 新建job: 转换选择刚才建好的输出日志转换.变量设置如下: 此ID就是转换中的${ID},执行job,可以看到控制台输出日 ...
- log4j输出日志到数据库中
1.log4j配置 ###----------------- appender:DATABASE_LOG -----------------#指定输出日志的等级和日志输出范围log4j.logger. ...
- 修改testng源码,添加beforeMethod和afterMethod中的日志到test中(可以不改源码,废弃)
在使用testng生成报告的时候,只会记录test方法中的日志,但是一般会在beforeMethod.beforeTest.afterMethod.afterTest中做一下数据的处理,这里面的日志没 ...
- Tomcat日志、项目中的log4j日志、e.printStackTrace()——我的日志最后到底跑哪去了?
1.Tomcat自带日志功能,即时你的项目中有log4j也不会影响到Tomcat自己记录日志. 2.你的项目中的log4j中的日志指定打印到什么地方(控制台或者文件),便会打印到什么地方,和Tomat ...
- Tomcat日志、项目中的log4j日志、控制台——我的日志最后到底跑哪去了?
1.Tomcat自带日志功能,即时你的项目中有log4j也不会影响到Tomcat自己记录日志. 2.你的项目中的log4j中的日志指定打印到什么地方(控制台或者文件),便会打印到什么地方,和Tomat ...
- Java日志框架-Spring中使用Logback(Spring/Spring MVC)
继上一篇文章http://www.cnblogs.com/EasonJim/p/7800880.html中所集成的是基于Java的普通项目,如果要在Spring和Spring MVC上集成,需要做如下 ...
随机推荐
- SVN四部曲之SVN设置详解深入
想知道不同的设置是干什么用的,你只需将鼠标指针在编辑框/选项框上停留一秒钟...一个帮助提示气泡就会弹出来. 常规设置 图 4.68. 设置对话框,常规设置页面 这个对话框允许你指定自己喜欢的语言,同 ...
- windows安装php和mysql
windows安装php和mysql 测试环境:windows2008-64位主机 1.下载护卫神php一件安装包 https://www.huweishen.com/soft/php/#phpdow ...
- 将本地代码同步到远程github上
1.在本地文件夹下建立.gitignore文件,将github下的github/gitignore/Node.gitignore文件复制到.gitignore中: 2.执行命令git add . 3. ...
- maven 添加jetty 支持
maven jetty run 即可 配置 <plugin> <groupId>org.mortbay.jetty</groupId> <artifactI ...
- combbox选中新添加的数据
用到这样的一个功能:在CombBox中添加一项,并激活此项. string uvaName = newUVA.uvaName; this.comboBox_allUVA.Items.Add(uvaNa ...
- rapidjson使用总结
Reference: https://blog.csdn.net/elloop/article/details/49908689 rapidjson简介 rapidjson是腾讯的开源json解析框 ...
- 什么是POP3、SMTP和IMAP?
POP3 POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议.它是因特网电子邮件的第 ...
- kali Rolling 安装QQ和虚拟机
环境: kali Rolling 64位 WPS 官网linux版下载链接:http://community.wps.cn/download/ 使用dpkg命令安装,遇到依赖问题,用apt-get ...
- [转]使用Navicat导入导出数据库表
原文地址:https://blog.csdn.net/anselandevil/article/details/81667199 步骤1:数据中原始数据如下: 点击表,右键选择导出向导,选择导出为sq ...
- git拉取远程分支
查看本地所有分支列表: git branch -a 查看远程所有分支列表: git branch -r 拉取远程分支(使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checko ...