在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,stream这个类有两个重要的运算符:

1.插入器(<<)

向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'\n';就表示把字符串"Write Stdout"和换行字符('\n')输出到标准输出流。

2. 析取器(>>)

从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。

在C++编程项目中,代码完成后,往往需要花费大量的时间对写的模块代码进行测试,而测试的case往往不止一两个。模块代码进行更新后,通常还需要进行对所有case进行回归测试。为了能在模块代码修改后,快速地进行回归测试,一般会使用自动化脚本,一次将所有case都执行一遍。

为做到自动化测试的目的,一般情况下,我们可以将每个case的特征信息写在一个文件中,测试时程序读取文件内容并解析出case的特征信息;必要时,我们还需要将程序执行过程中部分结果打印到文件中,以备最后check这个case是否测试通过。

以下是一个实例,为测试一个模块代码,提取case的特征信息有type,地址和id。Stringstream t_ss作为中介,先将getline得到的case文件中的一行 插入到t_ss中,然后再将t_ss 通过析取器解析到各个变量中。直接使用in_stream来析取也可以,但要区分input 文件中的空白行就比较困难。如果input文件中有一个空白行,会导致上一行解析出来的内容打印两次。并且,需要注意,有的时候文件最后一行有空白行,用gvim打开却看不到空白行,这时候可以用vs code打开文件,出现空白行。

结果输出文件为output.csv。csv是一种表格文件,windows下可以用excel打开。输出到表格文件时,列的分隔符是逗号,写完第一行后加上<<endl,接下来将会从第二行第1列开始写。

如果output.csv文件不存在,则新建;如果存在,则覆盖写。如果不想覆盖写,想以追加的方式进行存储到文件中,需要这样打开csv文件out_fstream.open("xxx.csv",ios::app); 其中app是append的意思。

参考  http://www.cplusplus.com/reference/fstream/ofstream/open/

/*
Original 2020-03-21
README:This is a example to teach you use disjunctor to read a filewhich is usefull for testing a module automaticlyexecute:    g++ -g -Wall -O0 main.cpp  -o sim
*/#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main(int argc, char** argv)
{std::ifstream in_stream ;std::ofstream out_stream;in_stream.open("input.txt");out_stream.open("output.csv"); //you can open *.csv with windows excelout_stream<<"type , addr, id" <<endl;// first line in excelchar         type;unsigned int addr;unsigned int id;if(in_stream.fail()){cout<<"input.txt file is not exist "<<endl;return 1;}while( !in_stream.eof()){stringstream t_ss ;std::string  t_string;std::getline(in_stream, t_string);t_ss << t_string ;if(t_string == "\0"){cout<<"blank line"<<endl;continue;}t_ss>>type >>std::hex >> addr >> std::dec >> id  ; cout<<" type="<< type << "  addr="<<hex<<addr << " id="<<id <<endl;// add your test function here// if use in_stream directly, can't distinguish the blank line in input file// in_stream>>type >>std::hex >> addr >> std::dec >> id  ; out_stream << type <<","<<hex << addr <<","<<id <<endl;}return 0;
}

C++析取器在代码自动化测试中的应用相关推荐

  1. 在网页中插入播放器的代码

    在网页中插入播放器的代码 插入Windows Media Player: ID:6BF52A52-394A-11d3-B153-00C04F79FAA6 插入real: <object id=& ...

  2. 【Android 逆向】代码调试器开发 ( 使用 NDK 中的 ndk-build + Android.mk 编译 Android 平台的代码调试器可执行应用 )

    文章目录 一.Android 平台代码调试器代码 二.Android.mk 构建脚本内容 三.Application.mk 构建脚本内容 四.正式编译 五.博客资源 一.Android 平台代码调试器 ...

  3. eclipse git 取远程代码_IDEA中的Git操作,看这一篇就够了!

    大家在使用Git时,都会选择一种Git客户端,在IDEA中内置了这种客户端,可以让你不需要使用Git命令就可以方便地进行操作,本文将讲述IDEA中的一些常用Git操作. SpringBoot实战电商项 ...

  4. C语言求离散数学中析取合取等

    从键盘输入两个命题变元P和Q的真值,求它们的合取.析取.蕴涵和等价四种运算的真值.要求对输入内容进行分析,如果不符合0.1条件需要重新输入,程序有良好的输入输出界面. 代码如下: #include&l ...

  5. java 实现自动生成部署文档_jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发......

    jenkins主机内存和gitlab主机内存最好配置4G及以上,防止各自的web端打不开 1.配置JDK环境 1)jdk解压到此目录 [root@localhost src]# pwd /usr/lo ...

  6. 用Python构建网页抓取器

    借助使用Python构建的尖端网页抓取技术,启动您的大数据项目 Scrape the Planet! Building Web Scrapers with Python 你会学到什么 如何理论化和开发 ...

  7. gcc 删除elf_ELF文件格式解析器 原理 + 代码

    本文为看雪论坛精华文章 看雪论坛作者ID:菜鸟m号 附件链接:[原创] ELF文件格式解析器 原理 + 代码 写在前面: 读<Linux二进制>,发现作者对 ELF文件格式部分并没有做详细 ...

  8. python接口测试非json的断言_荐在接口自动化测试中,如何利用Pytest + JSONPath 进行接口响应断言...

    之前有一篇文章,介绍了如何使用JSONSchema对接口响应进行断言,主要的适用场景是对响应的数据结构进行校验,保证客户端收到的数据结构稳定和合法.今天,介绍使用JSONPath对接口响应的值进行断言 ...

  9. python爬虫知乎图片_Python爬虫入门教程 25-100 知乎文章图片爬取器之一

    1. 知乎文章图片爬取器之一写在前面 今天开始尝试爬取一下知乎,看一下这个网站都有什么好玩的内容可以爬取到,可能断断续续会写几篇文章,今天首先爬取最简单的,单一文章的所有回答,爬取这个没有什么难度. ...

最新文章

  1. SpringMVC上传文件解析request请求为空获取不到数据问题
  2. C语言 一个字符常量占几个字节
  3. copyonwritearraylist原理_Java集合干货——CopyOnWriteArrayList源码分析
  4. Tensorflow2.x代码实现计算Top-k Accuracy
  5. c语言表达式10 6的结果,C语言表达式(++i)+(++i)+(++i)结果多少?
  6. 怎看沃科斯扫地机器人型号_科沃斯型号区别是什么?
  7. gSLICr: SLIC superpixels at over 250Hz
  8. linux xp双系统引导修复工具,XP和ubuntu双系统下如何修复XP引导菜单
  9. Hibernate的双向N-N关联(六)
  10. 使用 leastsq 对指定函数格式进行最小二乘拟合
  11. 浅谈VMD---变分模态分解
  12. Android pda出入库管理,仓库PDA扫描出入库管理系统
  13. linux下virtualbox安装win7虚拟机无法调整分辨率
  14. 如何批量修改抖音视频的分辨率
  15. nginx代理安装ssl证书
  16. oracle subsatr 分隔符,Oracle函数列表速查-数据库专栏,ORACLE
  17. 全民热议“10万彩礼结不了婚”的背后,百合网做了什么?
  18. 【微信小程序宝典】从零开始做微信小程序开发
  19. 显示器刷新率30hz_如何使您的120Hz或144Hz显示器使用其广告刷新率
  20. 史上最全网络通讯(IIOT、工业控制、5G、区块链)协议全景图

热门文章

  1. 物联网卡和流量卡相比哪个信号强
  2. 意想不到的前端三个小妙招
  3. allegro16.6使用汇总
  4. 中国象棋游戏Chess(1) - 棋盘绘制以及棋子的绘制
  5. “21天好习惯”第一期-1
  6. 数据透视:Excel数据透视和Python数据透视
  7. 高洛峰mysql_【干货】MySQL 安装与安全优化
  8. Win7下python3.6.5 64bit安装配置图文教程
  9. 【编译原理复习】第六章---- 属性文法和语法制导翻译
  10. 【综合类型第 26 篇】WebStorm 2019.2.2 下载、安装教程