博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gtest源码剖析:1.实现一个超级简单的测试框架xtest
阅读量:6832 次
发布时间:2019-06-26

本文共 2744 字,大约阅读时间需要 9 分钟。

下面的代码模仿gtest实现,主要说明了以下两点:

  1. ASSERT_* 和 EXPECT_*系列断言的原理和作用.
  2. gtest是怎样通过宏自动注册测试代码让其自动运行的.
1 #include 
2 #include
3 #include
4 #include
5 6 7 #define ASSERT_EQ(a,b) if((a) != (b)) \ 8 { \ 9 std::cout<<"[ FAIL ] "<<#a<<" not equal "<<#b<
(this)); \45 } \46 virtual void testBody(); \47 static MAKE_CLASS_NAME(test_case_name, test_name) * instance; \48 }; \49 MAKE_CLASS_NAME(test_case_name, test_name) * MAKE_CLASS_NAME(test_case_name, test_name) ::instance \50 = new MAKE_CLASS_NAME(test_case_name, test_name) ();\51 void MAKE_CLASS_NAME(test_case_name, test_name)::testBody()52 53 #define TEST(test_case_name, test_name) XTEST_TEST(test_case_name, test_name)54 55 56 namespace xtest {57 58 class Test{59 friend class UnitTest;60 public:61 Test(const std::string &n1, const std::string& n2):test_case_name(n1), test_name(n2){62 }63 virtual void testBody() = 0;64 std::string test_case_name;65 std::string test_name;66 private:67 Test(const Test&) = delete;68 Test& operator=(const Test&) = delete;69 };70 71 class UnitTest {72 public:73 static UnitTest* getInstance();74 void Run();75 static void regist(std::shared_ptr
const& a);76 private:77 static UnitTest* instance;78 std::vector
> all_tests12;79 };80 }81 82 inline void RUN_ALL_TESTS(){83 xtest::UnitTest::getInstance()->Run();84 }

 

1 #include "xtest.h" 2 namespace xtest{ 3  4     UnitTest* UnitTest::instance = NULL; 5     UnitTest* UnitTest::getInstance(){ 6         if(instance == NULL){ 7             instance = new UnitTest(); 8         } 9         return instance;10     }11     void UnitTest::Run(){12         std::cout<<"[==========] Start XTest..."<
test_case_name<<"."<<(*i)->test_name<
testBody();16 std::cout<
const& a){20 getInstance()->all_tests12.push_back(a);21 }22 }

 

 

现在看看怎么用吧

 

1 #include "xtest.h" 2  3 TEST(t1,t2){ 4     ASSERT_EQ(1,1); 5     ASSERT_EQ(1,2); 6     ASSERT_EQ(2,3); 7 } 8 TEST(t3,t4){ 9     EXPECT_EQ(1,1);10     EXPECT_EQ(1,2);11     EXPECT_EQ(2,3);12 }13 int main(int argc, char* argv[]) {14 15     RUN_ALL_TESTS();16     return 0;17 }

 

输出结果:

1 [==========] Start XTest...2 [ RUN      ] t1.t23 [       OK ]4 [     FAIL ] 1 not equal 25 6 [ RUN      ] t3.t47 [       OK ]8 [     FAIL ] 1 not equal 29 [     FAIL ] 2 not equal 3

 

 

posted on
2014-06-05 15:32 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/xusd-null/p/3770432.html

你可能感兴趣的文章
Imagex用法
查看>>
问题集
查看>>
ios实例开发精品文章推荐(7.23)
查看>>
php编译错误Note that the MySQL client library is not bundled anymore或者cannot find mysql header file...
查看>>
Myeclipse--jBPM4.3插件
查看>>
[每日一题] 11gOCP 1z0-053 :2013-10-12 RESULT_CACHE在哪个池?.............................44
查看>>
Unity物理系统的触发器
查看>>
mysql慢查询日志相关参数
查看>>
项目中如果管理前端文件CSS和JS
查看>>
13 jsp include
查看>>
Nginx和PHP-FPM的启动、重启、停止脚本分享(转)
查看>>
如何拷贝CMD命令行文本到粘贴板
查看>>
Oracle数据库—— 存储过程与函数的创建
查看>>
兼容iOS 10 资料整理笔记
查看>>
逻辑回归原理小结
查看>>
php 7.0 安装以及老版本php删除
查看>>
【Machine Learning】决策树案例:基于python的商品购买能力预测系统
查看>>
【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-5 底层驱动之旋转编码器
查看>>
[Erlang]Erlang经常使用工具解说
查看>>
PHP:第五章——字符串编码函数
查看>>