C++基础学习之12 - 测试驱动开发
来源:互联网 发布:win7如何卸载软件 编辑:程序博客网 时间:2024/04/30 08:05
测试驱动开发,英文全称 Test-Driven Development,简称TDD,是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程。
测试驱动开发的基本过程如下:
1. 快速新增一个测试;
2. 运行所有的测试(有时候只需要运行一个或一部分),发现新增的测试不能通过;
3. 做一些小小的改动,尽快地让测试程序可运行,为此可以在程序中使用一些不合情理的方法;
4. 运行所有的测试,并且全部通过;
5. 重构代码,以消除重复设计,优化设计结构简单来说,就是不可运行/可运行/重构——这正是测试驱动开发的口号。
上述定义来自百度百科,感谢 李彦宏。
那么在实际开发中,我们怎么样才能做到这一步呢?我们以下面一个例子来说明:
.h 头文件
/////////////////////////////////////////////////////////////////////////////////////////////////////////** 线程类*/class ThreadX{public:ThreadX(int nPriority = NormalPriority);~ThreadX(); bool isFinished() const;bool isRunning() const;void start(); void stop(); /** 线程函数*/static void TH_WORK(void *pContex);protected:/** run,inhrit for thread function*/virtual void run()=0;private:bool _beginThread();THREAD_HANDLE m_hThread; /**< 线程句柄*/int m_nPriority; /**< 优先级*/volatile int m_nRunStatu; /**< 运行状态-0:finished 1:running 2:inFinish*/};
.cpp文件
/** Constructor*/ThreadX::ThreadX(int nPriority) :m_nPriority(nPriority) ,m_nRunStatu(0){}ThreadX::~ThreadX(){stop();}bool ThreadX::isFinished() const{return 0==m_nRunStatu;}bool ThreadX::isRunning() const{return 1==m_nRunStatu;}/** start thread*/void ThreadX::start(){if (2==m_nRunStatu) { //wait(); // todo,wait time until return; }if( 1==m_nRunStatu || !_beginThread() )return;}/** stop thread*/void ThreadX::stop(){if (INVALID_TH_HANDLE == m_hThread)return;m_nRunStatu = 2; // inFinish#if (defined _WIN32) || (defined _WINDOWS_)WaitForSingleObject(m_hThread, INFINITE);#elsepthread_join(m_hThread, 0); #endifm_hThread = INVALID_TH_HANDLE; m_nRunStatu = 0; // thread is finished}/** 线程函数*/void ThreadX::TH_WORK(void *pContex){ThreadX *pThis = (ThreadX *)pContex; pThis->run(); // 执行运行线程}bool ThreadX::_beginThread(){// thread is running nowm_nRunStatu = 1;#if (defined _WIN32) || (defined _WINDOWS_)m_hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)TH_WORK, this,0,NULL);if (0 == m_hThread)// 创建监听线程失败{m_nRunStatu = 0;return false;}#else/*sched_param param;param.sched_priority = sched_get_priority_max(SCHED_RR);pthread_attr_t attr;pthread_attr_init(&attr);pthread_attr_setschedpolicy(&attr, SCHED_RR); // SCHED_OTHER(default), [SCHED_FIFO,SCHED_RR](real time for super user only)pthread_attr_setschedparam(&attr, ¶m);int nRet = pthread_create(&m_hThread, &attr, TH_WORK, this);*/ // 默认属性为非绑定、非分离、默认1MB堆栈、与父进程有相同优先级。int nRet = pthread_create(&m_hThread, NULL, TH_WORK, this);if (0 != nRet) // 创建监听线程失败{m_nRunStatu = 0;return false;}#endifreturn true;}对于上面的代码如何测试其准确性呢?不要等到写完代码才想起来测试,拜托!(我估计99%的人都听不进去这个)
你应该先这样写:
#include "ThreadX.h"int main(int argc, char **argv){ThreadX th1();ThreadX th2();th1.start();th2.start();th1.stop();th2.stop();system("pause");return 0;}没错,先写完上述测试例之后,再去填充 ThreadX 吧,ThreadX 里的函数记得打上Log,用于测试结果显示!
2 0
- C++基础学习之12 - 测试驱动开发
- 简图记录-C语言嵌入式测试驱动开发基础
- 测试驱动开发学习
- Junit学习笔记之三:测试驱动开发
- 《测试驱动开发》学习笔记
- iphone开发基础之objective-c学习
- 驱动学习之驱动框架基础
- <Test-Driven Development with Python>学习笔记 第一部分 测试驱动开发基础
- 测试驱动的开发学习笔记
- 学习如何进行 “测试驱动开发”
- 【学习笔记】C#测试驱动开发
- 测试驱动开发之体验--开篇
- 十万个为什么之测试驱动开发
- 读书笔记之测试驱动开发优点
- 测试驱动开发之初窥门径
- 嵌入式开发学习之基础编程语言 C 语言
- 嵌入式开发之c基础第二天学习笔记
- platform按键驱动学习之测试实例
- awk 多行合并一行
- 『家园』的效果
- 文章标题 HDU 1312 : Numerically Speaking (BFS)
- Android 高级面试题及答案
- subeclipse 与SVN的对应版本,及插件下载URL
- C++基础学习之12 - 测试驱动开发
- pip install lxml scrapy pywin32等报错问题解决
- 指数序列
- 编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔
- struts框架知识点总结<一>
- 2016书单总结--重构改善既有代码的设计--重新组织函数
- 在开发板上使用tftp命令下载服务器上的文件
- The content of the adapter has changed but ListView did not receive a notification
- 第29课 Python中for循环体与文件(迭代器解析)