代码测试的简单框架

linux下使用gtest框架进行c/c++单元测试 前言google test(以下简称gtest)是谷歌的开源C++单元测试框架,用来做c/c++的单元测试比较方便。下面对于它在linux下的使用做简单的介绍,同时也作为自己的笔记。因为仅作示例,因此以下过程也比较简单。准备gtest框架在github网站下载gtest框架https://github.com/google/googletest解压后,进入googltetest目录。目录下有以下内容 阅读详情

给代码写测试,通常是测试代码的最好方法。因为写出来的测试可以一遍又一遍地执行。当你修改了实现,你可以再次运行测试来检查一下你是否引入了任何bug。这种方法可以将你从调试中拯救出来,并引领你生产出具有更低错误倾向的代码。本文给出了具体的测试步骤和源代码,供大家参考!

 

写完代码后,你当然要测试它。有许多种方法来测试代码:你可以在你的代码中加些断点,或者观察实际发生的情况并和你预计的结果相比较,又或者写些测试程序等等。

给代码写测试,通常是测试代码的最好方法。因为写出来的测试可以一遍又一遍地执行。当你修改了实现,你可以再次运行测试来检查一下你是否引入了任何bug。这种方法可以将你从调试中拯救出来,并引领你生产出具有更低错误倾向的代码。

作为一个一般的方针,在开发你的测试的时候,我们建议你不要把结果打印到屏幕上;而是,根据输入数据,用asserts创建一个后置条件指明期望得到哪些输出数据。

如果你在运行测试时把结果打印到了屏幕上,开始时,你会去分析这些结果。然而,随着时间延长,你会越来越不注意这些打印到屏幕上的数据。即使数据指出了一个错误,你也可能不会意识到。

此外,如果别的人试着运行测试,他们不得不首先弄明白这些打印出来的数据是什么意思,这可能要花不少时间。反过来,如果你用了asserts,人们就只要去运行你的测试。如果发生了错误,他们会被提示在哪一行发生了错误,他们就可以去修正它。

这儿是一个测试例程的例子:

#include
#include
// 整理一个字符串的前导和追尾空白,
// 返回整理后的字符串
std::string trim_spaces( const std::string & str)
{
/* trim_spaces 的实现*/
}
void testTrimSpaces()
{
assert( trim_spaces( " abc") == "abc");
assert( trim_spaces( "def ") == "def");
assert( trim_spaces( " this is a test ") == "this is a test");
assert( trim_spaces( "") == "");
assert( trim_spaces( " ") == "");
}

怎样建立一个测试框架,和建立它每一个步骤:

第一步:将测试代码和实际代码清楚地分隔开。要做到这一步,一个很简单的方法是把所有用来做测试的文件都放到一个特别的目录中去。每个用来做测试的文件的名字都应该以test开头,然后加上它所测试的模块/类名。例如,从testWordTokenizer.cpp文件的名字就可以看出,它是用来测试一个断词类(word tokenizer class)的。

测试用的代码仅在执行测试时才被编译。当生成实际的应用程序时,测试代码会在预处理阶段就被移除。如果我们的每个测试文件都遵循下面的模式就可以保证这一点:

// Test.cpp
#ifdef TESTING
/* testing code*/
#endif // TESTING
// End of file

于是,如果定义了TESTING,我们就是在做测试;否则,我们就是在从实际的代码生成应用程序。

第二步:所有用来测试代码片断的函数的名字都应该以Test或test开头。对于你所测试的每个模块/类,都要有一个主测试函数负责调用其他测试函数来测试模块/类的各个代码段。这样你就不需要暴露出所有函数——只要暴露出主测试函数就可以了,像下面的例子:

// TestUrlUtility –用于测试 "Url Utility 函数族"
#if defined( TESTING)
#include "UrlUtility.h"
// 这个命名空间中的函数,从这个源文件外部是不可见的
namespace // 匿名命名空间
{
void TestDivideURL()
{ /* 测试代码 */ }
void TestIsUrlValid()
{ /* 测试代码*/ }
void TestIsHttpUrlValid()
{ /* 测试代码*/ }
void TestParseHttpUrl()
{ /* 测试代码*/ }
}; //匿名命名空间
// ... 这是从这个源文件外部唯一可见的函数
//
// 我们希望暴露出这个函数;
// 在任意文件中,你可以声明它的原型如下:
// void TestUrlUtility();
//
// 然后就可以在你的代码中调用
void TestUrlUtility()
{
TestDivideURL();
TestIsUrlValid();
TestIsHttpUrlValid();
TestParseHttpUrl();
}
#endif // #if defined( TESTING)
// 文件结束

第三步:创建一个测试主文件(大概应该叫做testMain.cpp),其中包含有开始执行测试的main函数。这个“main”函数要做的就是调用各种不同的测试函数。你可以取消希望执行的测试前面的注释符号,或者把你不想执行的测试注释掉。它的代码看起来会是这个样子:

// TestMain.cpp –用于测试整个应用程序
#ifdef TESTING
#include
// 测试函数开始
// ... 注意:这一部分包含的应该是
// 各个主测试函数(测试整个
// 模块或整个类的函数)
void TestUrlUtility();
void TestProxyManager();
void TestHttpRequest();
void TestHttpHeaderFields();
// 测试函数结束
/*
用于测试应用程序的各个部分
*/
int main()
{
std::cout << "Testing Application." << std::endl;
// 在这里加入你要执行的测试
// TestProxyManager();
// TestHttpRequest();
// TestUrlUtility();
TestHttpHeaderFields();
// 取消你要执行的测试前面的注释符号
return 0;
}
#endif
// 文件结束

第四步:有些代码片断不应该在测试时被编译(如用户界面代码,真正的“main”函数等)。这些代码将像下面这样括起来:

#ifndef TESTING
/* 实际代码 */
#endif // ndef( TESTING)

第五步:为测试创建一个配置。大多数最新的集成开发环境(IDE)都允许从不同的配置中选择,并至少提供了两个缺省配置:debug和release。基于debug配置创建一个新的。然后,直接打开TESTING标志。如果用的是gcc,那么给编译参数加上一个-DTESTING标志。如果用的是VC6,在Project Settings | C++ tab | General | Preprocessor处加一个TESTING的定义。

Mockito是一个用于Java单元测试的开源框架,它提供了一种简单而强大的方式来模拟和验证代码的行为 本文介绍了如何使用Mockito进行Java单元测试。我们学习了如何创建测试类,如何创建和操作模拟对象,以及如何设置模拟对象的行为和验证方法调用。通过使用Mockito,我们可以更轻松地编写可靠的单元测试,以确保代码的正确性和稳定性。希望本文对你理解和使用Mockito有所帮助!如果你对Mockito的更多功能和用法感兴趣,可以查阅Mockito官方文档或其他相关资源进行进一步学习。 阅读详情

相关推荐

Android车载桌面开发实战:从CarLauncher源码解析到自定义Launcher开发(Android 11)

本文深入解析了Android 11中CarLauncher的源码架构与核心模块,并提供了从零开始定制开发车载Launcher的完整实战指南。内容涵盖车载桌面的独特定位、驾驶场景优化、多屏协同、动态内容嵌入等核心挑战,以及如何构建符合安全规范、体验流畅的自定义车载桌面应用,是车载应用开发者提升系统级定制能力的实用参考。

weixin_29266647的博客 515

测试是否有必要看开发代码?如何能看懂?

说出来你可能不信,上一秒我还在赛道刷圈速,下一秒就想到了这个话题... 其实这个话题在我待整理列表里躺了挺久的,今天恰好周六,那就静下来谈谈我个人的一些感受。 就以题目里的 2 个问题进行展开吧。 一、是否有必要看开发代码? 对于这个问题,我觉得回答“必要”或者“不必要”都会不太恰当,具体因人而异。 觉得“不必要” 对于测试工程师的日常工作,我只要弄得清业务逻辑,通过各种方法论以及测试工具的...

测试开发的成长点滴 589

从零开始,手把手教你用RTL代码设计一个简单的8位CPU(附状态图与ALU设计)

本文详细介绍了如何从零开始设计一个简单的8位CPU,包括状态机设计、ALU实现与RTL编码实战。通过具体的指令集分析、状态图设计和Verilog代码示例,帮助读者深入理解CPU工作原理,并掌握RTL代码编写技巧。特别适合计算机系统学习者和硬件设计爱好者。

weixin_30847063的博客 320

C#中使用网络函数 (第一部分 用户函数)[翻译]

作者:Michael Bright 原文:http://www.csharphelp.com/archives2/archive439.html 本文将着重介绍Win32 API库中涉及网络管理的函数。首先我要讲一讲在.Net框架中管理用户的两个方法,第一种是Active Directory方法,这种方法要求你安装Active Directory。如果你打算管理一个小网络上的用户,或者一个未安装A

lovelulin的专栏 812

sap销售发货的流程_SAP销售订单发货后如何实现发票的自动创建?

问SAP销售订单发货后如何实现发票的自动创建?答业务场景有些快消零售企业,SAP系统单据量大,单据金额少,一般在销售发货后即可确认收入。此时无需人工在系统内操作VF01或者VF04进行开票操作,可将该操作设置成后台作业进行自动批量开票,具体操作如下:1、定义任务:VF06输入完以上信息,点击保存进入以下界面:说明:当前日期的意思是“开票的日期”等于“系统电脑中的当前日期”当前日期+/-...

weixin_42358409的博客 3361

从零到一:STM32 CubeMX与WS2812B的DMA驱动艺术

本文详细介绍了如何使用STM32 CubeMX和DMA技术驱动WS2812B RGB LED灯条,从硬件设计到软件实现的全过程。通过CubeMX配置定时器和DMA,实现高效的PWM波形生成与数据传输,解决传统GPIO控制资源占用高的问题。文章还提供了颜色编码、动画效果实现及常见问题解决方案,助力开发者快速掌握智能LED控制技术。

weixin_28278377的博客 977

五款常见的自动化测试框架

在自动化的软件测试系统实现过程中使用框架设计可以使得测试脚本的维护量减至最少。然而,大量的自动化测试工具均采用传统的“录制一回放”模型,导致了较高的脚本维护量,因为测试数据在测试脚本程序中是以硬编码方式实现的。此外,工具内建的测试用例除了测试应用程序的图形用户界面,实际上并没有其它用处。因此,如何选择一个合适的测试自动化框架,是一个自动化测试小组开始启动前需要最优先考虑的一个问题。一个自动化测试框架就是一个由假设、概念以及为自动化测试提供支持的实践的集合。

xiao1542的博客 813

MATLAB新手必看:Stewart平台运动学逆解从入门到实战(附完整代码)

本文详细介绍了如何使用MATLAB实现Stewart平台的运动学逆解,从基础原理到完整代码实现,涵盖并联机器人的数学建模、MATLAB编程和Simulink集成。通过实战案例和可视化分析,帮助新手快速掌握Stewart平台的运动学逆解技术,适用于机器人学和控制理论领域的研究与应用。

dream的博客 551

C++编程思想 第2卷 第2章 防御性编程 一个简单的单元测试框架 测试框架源代码

头文件的查找路径包括子路径 库文件的查找路径中包含TestSuite子目录 这样可以链接相关的目标文件,其实可以不用这样,直接把代码添加 到工程里面就好,链接同样通过 //: TestSuite:Test.h // From "Thinking in C++, Volume 2", by Bruce Eckel &amp; Chuck Allison. // (c) 1995-2004 Min...

eyetired的博客 165

SLG项目开发经验二_大地图设计与实现

本文深入探讨了SLG游戏大地图设计与实现的关键技术,包括网格化业务框架、AOI系统优化、边界处理方案以及行军系统实现。通过Unity引擎的实践案例,详细解析了大地图性能优化的核心策略,如分块加载、GPU Instancing和差异同步协议,为SLG项目开发提供宝贵经验。

weixin_29001419的博客 218

复现论文《Analysis of circulating current mechanism of Grid-forming offshore wind farm based on DRU-HVDC》

该论文研究了基于二极管整流单元(DRU)和低频交流(LFAC)输电的构网型(GFM)海上风电场并网系统中环流的产生机理。由于 DRU 不可控,系统电压与频率依赖于风力发电机(WT)的网侧变流器,当多台 WT 并联运行时,因输出电压幅值、相位、输出阻抗或频率不匹配,会产生基频环流,导致系统损耗增加与稳定性下降。论文通过理论建模与 MATLAB/Simulink 仿真,分析了四种不平衡工况下的环流机理,并指出幅值不平衡和阻抗不平衡引起无功环流,相位不平衡引起有功环流,频率不平衡则引起环流振荡,为后续环流抑制研究

huanghm88的专栏 104

labview常规测试框架模板,可以远程介绍框架使用方式,代码有简单备注。 版本为2018,卖出不退

这个框架没用到任何面向对象编程的概念,底层架构用最基本的簇结构和状态机构成,实测过二十多个工业项目依然稳如老狗。

kUhzIPVBnE的博客 349

构建OneService:打造高效、安全、灵活的企业级数据服务平台

数据服务(OneService)作为统一的数据服务出口,实现了数据的统一市场化管理,有效地降低数据开放门槛的同时,保障了数据开放的安全。

数据与算法架构提升之路专栏 2106

Windows下基于Gtest框架及OpenCppCoverage插件对已有VS项目进行单元测试及代码覆盖率统计

以上为完整步骤,后续可以调试复杂函数。

太阳今天醒了吗的博客 1094

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

为数据访问代码编写测试–不测试框架

当我们向数据访问代码编写测试时,是否应该测试其公共API的每种方法? 一开始听起来很自然。 毕竟,如果我们不对所有内容进行测试,那么如何知道我们的代码可以按预期工作呢? 这个问题为我们提供了重要的线索: 我们的代码 。 我们应该只对自己的代码编写测试。 什么是我们自己的代码? 有时很难确定我们应该测试的代码。 原因是我们的数据访问代码与将信息保存到使用的数据存储中或从中读...

最佳 Java 编程 123

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

html请求接口_十分钟学会搭建接口测试框架

现在出去面试,工作年限3年以上软件测试工程师的基本上都要求会写一些脚本,再者就要会搭测试框架。 下面我来介绍下,零代码基础搭一个简单的接口测试框架。用到的是unittest框架:接口用例无非就是发送请求——>得到响应——> 根据自己的需求解析响应内容进行判断,接口请求这里指的是http请求,我用的是python的requests库,Unittest需要在setUp和s...

weixin_39831104的博客 408

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

对redis中单元测试框架的简单修改

/* This is a really minimal testing framework for C. * * Example: * * test_cond("Check if 1 == 1", 1==1) * test_cond("Check if 5 > 10", 5 > 10) * test_report() * * ----------------------------

raiet 1270

Python测试框架之pytest简单应用

Pytest框架简介 1、Python的第三方单元测试框架,比自带unittest更简单和高效,支持315种以上的插件,同时兼容unittest框架。 2、Unittest框架迁移到pytest框架的时候不需要重写代码。 3、纯python代码的自动化测试框架。 4、可以很好的与Jenkins集成。 5、Allure支持pytest框架。 与其它测试框架的比较: RF:报表好看、关键字语法 Unittest:单元测试 Pytest:加强版Unittest Pytest环境配置: 安装:pip install

u013465115的博客 486

前端测试——端对端测试框架 Playwright 总结

前端应用测试分为几种常见类型:端到端(e2e) :一个辅助机器人,表现得像一个用户,在应用程序周围点击,并验证其功能是否正确。常见的测试框架是 Playwright。单元:验证单独的、孤立的部分按预期工作。常见的测试框架是 Jest。静态:在你写代码的时候捕捉错别字和类型错误。常见的是使用 Typescript 检查每种前端测试都有其适用场景:端到端测试:验证业务页面功能的基本可用。单元测试:验证组件的复杂场景应用。静态测试:大部分前端代码中都尝试可以引入,提高代码的可维护性。

nhb687095的博客 871

jest (让人愉悦的测试框架)

jest (让人愉悦的测试框架) 1 什么是 Jest Jest 是 Facebook 的一套开源的 JavaScript 测试框架,它自动集成了断言、JSDom、覆盖率报告等开发者所需要的所有测试工具,是一款几乎零配置的测试框架。 2 安装 使用 yarn 安装 Jest yarn add --dev jest 复制代码或 npm: npm install --save-dev jest 复...

weixin_33733810的博客 1万+

Python单元测试框架unittest入门

单元测试是一种软件测试方法,是测试最小的可测试单元,通常是一个函数或一个方法。在软件开发过程中,单元测试作为一项重要的测试方法被广泛应用。

2301_78843735的博客 1046
上一篇: 实例演练XML编程
下一篇: UML类图详解
suacker
博客等级 码龄24年 46粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值