1、利用color封装实现个性化颜色输出功能

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <stack>
#include <algorithm>
#include <string>
#include <map>
#include <set>
#include <vector>
using namespace std;#define COLOR(msg, code) "\033[0;" #code "m" msg "\033[0m"
#define RED(msg)     COLOR(msg, 31)
#define GREEN(msg)   COLOR(msg, 32)
#define YELLOW(msg)  COLOR(msg, 33)
#define BLUE(msg)    COLOR(msg, 34)int main() {//printf("\033[0;" "31" "m" "hello kaikeba" "\033[0m\n");printf(RED("hello\n"));printf(GREEN("hello\n"));printf(YELLOW("hello\n"));printf(BLUE("hello\n"));printf("hello\n");return 0;
}

结果:

1、ktest.h

#ifndef _KTEST_H
#define _KTEST_H#define LOG(frm, args...) { \printf("[%s : %s : %d] ", __FILE__, __func__, __LINE__); \printf(frm, ##args); \printf("\n"); \
}//实现color系列封装
#define COLOR(msg, code) "\033[0;" #code "m" msg "\033[0m"
#define RED(msg)     COLOR(msg, 31)
#define GREEN(msg)   COLOR(msg, 32)
#define YELLOW(msg)  COLOR(msg, 33)
#define BLUE(msg)    COLOR(msg, 34)int test_flag=0;
//二次封装宏(实现EXPECT系列的封装)
#define EXPECT(a, comp, b) { \__typeof(a) __a=(a),__b=(b);\if (!(__a comp __b)) { \test_flag=0;\printf(YELLOW(  "%s:%d:Failure\n"),__FILE__,__LINE__); \printf(YELLOW(  "Expected:((%s)%s (%s)),actual:%d vs %d\n"),#a,#comp,#b,__a,__b);\} \
}#define EXPECT_EQ(a, b) EXPECT(a, ==, b)
#define EXPECT_NE(a, b) EXPECT(a, !=, b)
#define EXPECT_LT(a, b) EXPECT(a, <, b)
#define EXPECT_LE(a, b) EXPECT(a, <=, b)
#define EXPECT_GT(a, b) EXPECT(a, >, b)
#define EXPECT_GE(a, b) EXPECT(a, >=, b)//4
#define TEST_FUNC_NAME(a,b) kaikeba_##a##_##b
#define TEST(a,b) \void TEST_FUNC_NAME(a,b)();\  //声明测试用例函数__attribute__((constructor))\ //声明并定义注册函数void reg_##a##_##b() {\add_test_function(TEST_FUNC_NAME(a,b),#a"."#b);\return ;\}\void TEST_FUNC_NAME(a,b)()//2定义一片存储区,存放不同的测试用例
struct FuncData{void (*func)();//函数指针,用来指向测试用例函数地址const char *func_name;//存放相关测试用例的名字,注意区分和函数名字的差别
}func_arr[100];
int func_cnt=0;//表示当前的系统中注册了多少个测试用例//3添加测试用例的函数
void add_test_function(void (*func)(),const char* func_name){func_arr[func_cnt].func=func;func_arr[func_cnt].func_name=func_name;func_cnt++;return;
}//5
const char*RUN = GREEN("[ RUN ]");
const char *OK = GREEN("[ OK  ]");
const char*FAILED=RED("[FAILED]");//1实现RUN_ALL_TEST,功能是遍历所有的测试用例的
int RUN_ALL_TESTS(){//foreach test casefor(int i=0;i<func_cnt;i++){printf("%s %s\n",RUN,func_arr[i].func_name);test_flag=1;long long b=clock();func_arr[i].func();long long e=clock();if(test_flag){printf("%s %s(%lld ms)\n",OK,func_arr[i].func_name,100*(e-b)/CLOCKS_PER_SEC);}else{printf("%s %s(%lld ms)\n",FAILED,func_arr[i].func_name,100*(e-b)/CLOCKS_PER_SEC);}}return 0;
}#endif

2、test.cpp

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <stack>
#include <algorithm>
#include <string>
#include <map>
#include <set>
#include <vector>
#include <ktest/ktest.h>
using namespace std;int add(int a, int b) {return a + b;
}TEST(test1, add) {EXPECT_EQ(add(3, 4), 7); // ==EXPECT_NE(add(3, 4), 6); // !=EXPECT_LT(add(3, 4), 8); // <EXPECT_LE(add(3, 4), 7); // <=EXPECT_GT(add(3, 4), 6); // >EXPECT_GE(add(3, 4), 7); // >=
}TEST(test2, add) {EXPECT_EQ(add(3, 4), 7); // ==EXPECT_NE(add(3, 4), 7); // !=EXPECT_LT(add(3, 4), 8); // <EXPECT_LE(add(3, 4), 7); // <=EXPECT_GT(add(3, 4), 6); // >EXPECT_GE(add(3, 4), 7); // >=
}int main() {return RUN_ALL_TESTS();
}

编译指令g++ -I./include test.cpp

输出结果

改进版的放在了github上test_framework

基于Google测试框架实现自己的测试框架相关推荐

  1. 好饭不怕晚,Google基于人工智能AI大语言对话模型Bard测试和API调用(Python3.10)

    谷歌(Google)作为开源过著名深度学习框架Tensorflow的超级大厂,是人工智能领域一股不可忽视的中坚力量,旗下新产品Bard已经公布测试了一段时间,毁誉参半,很多人把Google的Bard和 ...

  2. 玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试

    一.前言 "死亡测试"名字比较恐怖,这里的"死亡"指的的是程序的崩溃.通常在测试过程中,我们需要考虑各种各样的输入,有的输入可能直接导致程序崩溃,这时我们就需要 ...

  3. RPC框架性能基本比较测试

    from: http://www.useopen.net/blog/2015/rpc-performance.html RPC框架性能基本比较测试 gRPC是Google最近公布的开源软件,基于最新的 ...

  4. 通用渗透测试框架、简化渗透测试流程

    文章目录 通用渗透测试框架 简化的渗透测试流程 黑客攻击的一般过程 通用渗透测试框架 从技术管理的角度来看,遵循正规的测试框架对安全测试极为重要.通用渗透测试框架涵盖了典型的审计测试工作和渗透测试工作 ...

  5. 基于Android设备的Kali Linux渗透测试教程第1章渗透测试

    基于Android设备的Kali Linux渗透测试教程第1章渗透测试 渗透测试(Penetration Testing)是一种通过模拟攻击者所采用的技术与方法,攻击目标系统的安全控制措施,并取得访问 ...

  6. spring框架mvc框架_Spring的MVC测试框架入门–第1部分

    spring框架mvc框架 最新推出的主要Spring框架是Spring MVC测试框架,Spring Guys声称它是"一流的JUnit支持,可通过流畅的API测试客户端和服务器端Spri ...

  7. 二.全局定位--开源定位框架livox-relocalization实录数据集测试

    相关博客: 二十五.SLAM中Mapping和Localization区别和思考_goldqiu的博客-CSDN博客 二十五.SLAM中Mapping和Localization区别和思考_goldqi ...

  8. python测试嵌入式_用Python测试嵌入式系统的测试框架

    再说一次,很久没人问过我了,但我想我可以做点贡献.在 我们目前正在构建一个完整的测试解决方案,旨在测试用于验证和验证的嵌入式设备.我们的旗舰实现基于Google的OpenHTF:https://git ...

  9. 基于微信小程序的大学生心理健康测试设计与实现 .docx

    目录 1 绪论 3 1.1 项目开发背景 3 1.2 项目开发意义 3 1.3 项目主要的内容 4 2 相关技术介绍及系统环境开发条件 5 2.1相关技术介绍 5 2.2系统环境开发条件 6 3 系统 ...

  10. foobar_Foobar挑战:Google对开发人员的隐藏测试

    foobar by Daniel Simmons 丹尼尔·西蒙斯(Daniel Simmons) Foobar挑战:Google对开发人员的隐藏测试 (The Foobar challenge: Go ...

最新文章

  1. python如何编程-编程零基础应当如何开始学习 Python?
  2. 关于Session_End()运行机制的一些细节!
  3. 智能可穿戴平台,你更看好谁?
  4. 分分钟手写http server
  5. oracle高级复制管理里面,配置高级复制问题,请大家指点!
  6. python 判断字符串时是否是json格式方法
  7. java字符集编码是,java字符集与编码有关问题
  8. Keras实现LeNet-5网络,与可视化网络
  9. php post请求 下载文件,POST请求 下载文件
  10. sftp 设置仅能访问自己目录的用户
  11. 系统调用----sandir
  12. C++之文件IO操作流
  13. 这是自己的第一篇博客
  14. 为什么天才容易患阅读障碍症_患了慢阻肺为什么容易日渐消瘦?
  15. java相对应的键盘输入_Java 实现输入键盘上任意键显示出相对应的ASCII
  16. linux装系统到u盘,萌新的Linux之路(1):安装Linux系统到U盘
  17. Linux之常用Shell脚本总结
  18. [ios] - TommyBros(山寨马里奥) – 开源游戏
  19. 3.7V锂电池升压5V方案
  20. 浙江大学求是科学班计算机,浙江大学“汉语言文学(求是科学班)”2020年招生简章...

热门文章

  1. Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39
  2. 《Effective C#》读书笔记——条目19:保证0为值类型的有效状态.NET资源管理
  3. Xcode 卸载方法
  4. 《WinForm开发系列之控件篇》Item33 NotifyIcon(暂无)
  5. [Echarts可视化] 二.php和ajax连接数据库实现动态数据可视化
  6. Git之深入解析如何贮藏工作分支与清理工作目录
  7. 2019年第十届蓝桥杯 - 省赛 - C/C++大学B组 - I. 后缀表达式
  8. 127. Word Ladder 单词接龙
  9. 《数据库原理与应用》(第三版) 第4章SQL Server 2012基础 习题参考答案
  10. 【C++】 C++标准模板库(九) Bitsets