单元测试框架的简单实现
来源:互联网 发布:淘宝办澳洲签证靠谱吗 编辑:程序博客网 时间:2024/05/16 06:22
自己重新实现了一个单元测试框架,写的玩玩的,在项目里试用了下,还可以。源码也就100行左右
#pragma once#include <vector>#include <iostream>#include "consolecolor.h"#include <string>using namespace std;class RunUnitTest{public: RunUnitTest() :m_bPass( false ) {} virtual ~RunUnitTest() {} virtual void Run() = 0; virtual void SetUp() = 0; virtual void TearDown() = 0; virtual void Pass( bool bPass ) { m_bPass = bPass; } virtual bool isPass()const { return m_bPass; }private: bool m_bPass;};class UnitTestManager{public: static UnitTestManager& GetInstance() { static UnitTestManager s_instance; return s_instance; } RunUnitTest* RegisterUnitCase( RunUnitTest* t ) { _unit_cases.push_back( t ); return t; } void RunAllTest() { std::cout << yellow << "gtest_lite version:0.0.1" << std::endl; std::cout << blue << "[ CASE ]There are " << _unit_cases.size() << " case to test" << std::endl; int nPass = 0, nNotPass = 0; for ( auto& uc : _unit_cases ) { uc->SetUp(); uc->Run(); uc->TearDown(); if ( uc->isPass() ) { nPass++; } else { nNotPass++; } } std::cout << blue << "[ END ]Have Test " << nPass << " Pass and " << nNotPass << " Failed " << std::endl; std::cout << reset; }private: std::vector<RunUnitTest*>_unit_cases;};class NullType{};#define CASENAME(class_type) class_type##case_name##_UnitTest#define CASE_TEST(class_type,case_name,...) \class CASENAME(class_type) :public RunUnitTest \ { \class_type *t; \const std::string m_class_type = #class_type;\const std::string m_class_name = #case_name;\public:\CASENAME(class_type)(){}\~CASENAME(class_type)() { if ( t )delete t; }\void SetUp(){t = new class_type (__VA_ARGS__);cout<<green <<"[ RUN ]"<<m_class_type<<"."<<m_class_name<<endl;}\void TearDown() {\if ( t )delete t; t = nullptr;\if(isPass()){ cout<<green << "[ OK ]"<<m_class_type<<"."<<m_class_name<<endl; }\else { cout << red << "[ FAIL ]" << m_class_type <<"."<< m_class_name << endl; }}\void Run();\};\CASENAME(class_type) *class_type##case_name = static_cast<CASENAME(class_type)*>( UnitTestManager::GetInstance().RegisterUnitCase( new CASENAME(class_type) ) );\void CASENAME(class_type)::Run()#define RUN_ALL_TEST() UnitTestManager::GetInstance().RunAllTest();#define EXPECT_EQ(expect,actual) \Pass(expect != actual);\if(!isPass())\{\ std::cout << red <<"[ ]"<<__FILE__<<"("<<__LINE__<< "): :" << #actual<<std::endl; \ std::cout << red << " Expect:" << expect << std::endl; \ std::cout << red << " Actual:" << actual << std::endl; \}#define EXPECT_MF_EQ(expect,actual) \Pass(expect != t->actual);\if(!isPass())\{\ std::cout << red <<"[ ]"<<__FILE__<<"("<<__LINE__<< "): :" << #actual<<std::endl; \ std::cout << red << " Expect:" << expect << std::endl; \ std::cout << red << " Actual:" << t->actual << std::endl; \}//这里继续补充其他断言格式
0 0
- 单元测试框架的简单实现
- 简单的Java单元测试框架
- 一个简单的C++单元测试框架
- [PYTHON]一个简单的单元测试框架
- 用Visual studio2005的单元测试框架实现一个简单的计算器
- SSH框架下单元测试的实现
- 使用VS实现简单的单元测试
- poco库的简单实现单元测试
- adnroid 单元测试 简单实现
- 对redis中单元测试框架的简单修改
- c++单元测试框架Gtest的简单配置与使用
- 简单的单元测试
- 简单的junit单元测试
- ios 简单的单元测试
- Interceptor框架的简单实现
- 实现简单的jquery框架
- Google开源C++单元测试框架gTest 8:编写简单的测试框架
- C++单元测试框架的比较
- Linux进程创建fork()与vfork()
- android开发 系统信息相关工具类 权限管理页面
- android activity单实例化
- Anroid ListView分组和悬浮Header实现
- 华为OJ试题整理
- 单元测试框架的简单实现
- 重载运算符
- android studio windows Mac linux下载地址
- Android Volley完全解析(三),定制自己的Request
- 字符串&malloc&strlen&strcpy
- 网络:GET 的使用
- LeetCode(51)- Count and Say
- 支付宝java后台接入简单流程
- 错误:the file 'xxx.app' couldn't be opened because you don't have permission to view it