RSS 2.0 Feed
2007-05 Entries
摘要:   无论你是否采用测试驱动开发(TDD),编写Unit test case都是重要的工作.在项目的各个阶段,我们都需要构建测试、运行测试、报告测试结果. 有很多框架为这个工作提供便利,比如大名鼎鼎的xUnit系列.今天,我准备介绍的是一个轻量级的C++ Unit Test框架:TUT (Template Unit Tests的缩写)    大家第一个想问的问题估计就是:它和CppUnit有什么不同? 它有什么特点?   我觉得最关键的地方在于TUT是一个轻量级的框架,TUT是使用template技术写的,完全没有macro. 除去例子,它的代码一共只有两个头文件.我们完全不用build这个框架然后设置编译连接那么多麻烦,只要在编写Unit test的时候,把这两个头文件拷贝到项目目录或者设置一下头文件的包含路径就可以了.  TUT把Unit test case通过group-test的层次组织,用户可以把相似的test case放到同一个group,这个group有一个唯一的名字, group包含多个test, 包含的test数量取决于你的编译器允许的template嵌套深度.用户可以选择运行所有的测试或者只是部分group,甚至部分test. 在每个test里面,你可以使用TUT提供的一些方法来确认测试结果的正确性,告诉TUT这个测试是成功还是失败.   闲话少说,估计大家喜欢眼见为实,让我们写个例子来看看:   1. 首先包含必要的头文件#include <stdio.h>#include "tut.h"#include "tut_reporter.h"  2. 接着写了一个测试class //测试类,做的事情很简单,记住给它的最大的数字,我们就测试这个类class max_pool{ int m_max;public: max_pool(int x=5) : m_max(x){ printf("%s init max num %d\n", __func__, x); } void try_set_value(int num) { if (num>m_max) m_max = num; } int get_max() { return m_max; }};   3. 写关于test group的代码  /*这个类用在test_basic里面, 我们可以用它来完成一些每个test都需要做的初始化和清理工作, 不过这里只是为了说明, 只是输出点文字*/class obj_init{ public: obj_init() { printf( "obj_init for each test\n"......[阅读全文]

posted @ | Feedback (3) | Filed Under [ C/C++ ]

摘要:领导者/追随者(Leader/Followers)模型和半同步/半异步(half-sync/half-async)模型都是常用的客户-服务器编程模型. 这几天翻了些文章,发现对领导者/追随者模型说的比较少,下面就这个模型打个比方: 话说一个地方有一群有组织无纪律的人从事山贼这个很有前途的职业。 一般就是有一个山贼在山路口察看,其他人在林子里面睡觉。 假如发现有落单的过往客商,望风的山贼就会弄醒一个睡觉的山贼,然后自己去打劫。 醒来的山贼接替作望风的事情。 打劫的山贼搞定以后,就会去睡觉,直到被其他望风的山贼叫醒来望风为止。 有时候过往客商太多,而山贼数量不够,有些客商就能侥幸平安通过山岭(所有山贼都去打劫其他客商了)。   下面是这个模式的计算机版本:   有若干个线程(一般组成线程池)用来处理大量的事件 有一个线程作为领导者,等待事件的发生;其他的线程作为追随者,仅仅是睡眠。 假如有事件需要处理,领导者会从追随者中指定一个新的领导者,自己去处理事件。 唤醒的追随者作为新的领导者等待事件的发生。 处理事件的线程处理完毕以后,就会成为追随者的一员,直到被唤醒成为领导者。 假如需要处理的事件太多,而线程数量不够(能够动态创建线程处理另当别论),则有的事件可能会得不到处理。 这个模型其实并不难于理解,但是我想假如是中国人给起的名字的话,也许会叫作 "皇帝轮流做,今年到我家" 模型更加贴切,因为领导者追随者之间是一种平等的关系。这不符合大部分人对于"领导者-追随者"的通常意义的理解。说句实话,个人认为半同步/半异步模型叫做"领导者-追随者'更加适合,不相信可以看看例子: 话说一个地方有一群有组织无纪律的人从事山贼这个很有前途的职业。 他们有一个山贼头头,他专门负责望风,其他的喽罗待命。 假如发现有落单的过往客商,山贼头头会到路口拦路,让客商双手抱头蹲在地上,然后让一个小喽罗为这个倒霉鬼"服务"。 假如客商很多,山贼头头会让客商在地上蹲成一排(严肃点,排队啦,打劫啦)。 一群小喽罗挨个为大家"服务"。 头头的工作很重要,对于每个客商他都不会花费太多时间,拦路以后,他会让客商排队等待打劫。 过往客商太多而山贼数量不够,客商的排队可能需要等待较长的时间。 这个就是半同步/半异步模型的比喻,可以参考一下 http://www.javaeye.com/article/60414 大家可以看到这两个模式之间的区别,最显著的,就是半同步/半异步模型拥有一个显式的待处理事件队列,而领导者-追随者模型没有一个显式的队列(很多IO机制操作系统一般会有一个隐式的队列)。因为这个事件队列,半同步/半异步模型可以获得处理上的灵活性,但是因为上下文的切换,效率上却比领导者-追随者模型稍有不及。 BTW,昨晚试验live writer,结果这个软件自动post了一篇blog,而我一时半会没有发现,望大家海涵阿。说句实话,觉得这个软件虽然不错,但是不是太适应中国国情阿,国内大部分blog都没法支持,csdn的支持也不是很好,居然上传不了图片,本来想以后可以写文章同时发到多个blog,看来是不现实了。 原文地址: http://blog.joycode.com/peon/archive/2007/05/13/102457.aspx...[阅读全文]

posted @ | Feedback (12) | Filed Under [ 多维技术 ]