基于Google测试框架实现自己的测试框架
生活随笔
收集整理的這篇文章主要介紹了
基于Google测试框架实现自己的测试框架
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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; }#endif2、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测试框架实现自己的测试框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将有序数组转为二叉搜索树
- 下一篇: 数组理论知识