存档

2010年1月 的存档

CppUnit CookBook中文版

2010年1月27日 huubby 没有评论

自己翻译的cppunit cookbook,如有错漏,欢迎指出。可以在这里下载到cppunit的最新版本源码。

这只是一个cookbook的翻译,并没介绍安装方法,你可以在这里找到win32下的安装方法和例子。不过,这个例子并不清楚,还是建议你看看这里的例子,清楚的多。看完这些安装方法和例子之后,再回头看看这篇cookbook,应该会帮助你理解例子里面那些代码的含义。

1、简单的测试案例

怎么才能知道你的代码是不是能够正常工作?有很多方法可以达到这个目的。通过调试器单步跟踪,或者在你的代码里加入打印输出代码是两个比较简单的办法,但是这两个方法都有缺点。单步跟踪不能自动进行,每次代码稍有调整就要进行调试。打印输出也不错,只是这种方法会增加很多不必要的代码,导致代码臃肿丑陋。

CppUnit单元测试很容易建立起来,并且可以自动进行,而且,一旦你写完测试用例,就能通过它们保证你的代码质量。

按照下面的流程可以构造一个简单的test:

1、继承CppUnit::TestCase类。

2、重写runTest()方法。

3、使用CPPUNIT_ASSERT()和CPPUNIT_ASSERT(bool)两个宏来检测表达式或值,以判断测试成功与否。

举个例子,如果要测试一个复数类的赋值(=号)运算符,按照上面的步骤,代码如下:

class ComplexNumberTest : public CppUnit::TestCase
{
public:
     ComplexNumberTest( std::string name ) : CppUnit::TestCase( name ) {}
     void runTest()
     {
          CPPUNIT_ASSERT( Complex (10, 1) == Complex (10, 1) );
          CPPUNIT_ASSERT( !(Complex (1, 1) == Complex (2, 2)) );
     }
};

一个简单的test就建起来了。但通常来说,我们会在同一个对象里面有很多小的测试用例。这种情况下,我们用fixture。

2、fixture

fixture是为一组测试用例提供基础服务的对象,当你边开发边测试时,使用fixture非常方便。我们试着模拟一下这种边开发边测试情况。

假设我们真的在开发一个复数类,首先,定义一个空的Complex类:

class Complex {};

现在,创建一个上面的ComplexNumberTest类对象,然后编译代码看看会发生什么。我们会得到几个编译错误。因为测试过程中用到了==操作符,但我们并没定义这个运算符。

现在为Complex类定义一个:

bool operator==( const Complex &a, const Complex &b)
{
     return true;
}

再次编译运行这个测试。这次编译虽然通过了,但测试却是失败的。

要再做一点点事情让==操作符正常工作,重写代码如下:

class Complex
{
     friend bool operator ==(const Complex& a, const Complex& b);
     double real, imaginary;
public:
     Complex( double r, double i = 0 ) :real(r) , imaginary(i) {}
};
bool operator ==( const Complex &a, const Complex &b )
{
     return a.real == b.real  &&  a.imaginary == b.imaginary;
}

编译运行,测试顺利通过。

好了,现在我们准备增加一些新的操作和新的测试。这个时候,fixture就体现出方便性了。因为在这个时候,如果使用fixture实例化三四个Complex对象,并且在测试过程中复用这几个对象,这样不需要重复构建这些实例对象,测试代码会更加好写。

fixture的使用步骤如下:

- 给每个fixture添加成员变量;

- 重写CppUnit::TestFixture::setUp()以初始化这些变量;

- 重写CppUnit::TestFixture::tearDown()方法释放setUp申请的系统资源。

class ComplexNumberTest : public CppUnit::TestFixture
{
private:
     Complex *m_10_1, *m_1_1, *m_11_2;
public:
    void setUp()
    {
         m_10_1 = new Complex( 10, 1 );
         m_1_1 = new Complex( 1, 1 );
         m_11_2 = new Complex( 11, 2 );
    }
    void tearDown()
    {
         delete m_10_1;
         delete m_1_1;
         delete m_11_2;
     }
};

有了这个fixture之后,我们就能在开发过程中添加另外的测试用例和我们需要的其他东西了。

阅读全文…

分类: C/C++ 标签: , ,

聚合QQ,MSN,GTALK的即时聊天软件-Miranda IM

2010年1月17日 huubby 2 条评论

星期六整了一个聚合的聊天软件-Miranda IM,很早就有的一个东西。Miranda IM是个开源项目,官方网站在这里,可以下载安装程序,也可以下载绿色版直接运行使用。Miranda IM支持各种各样的插件,包括但不限于各种通讯协议插件,如QQ,MSN,GTALK等;界面美化,如主题,弹出窗口皮肤,聊天窗口美化等;聊天记录增强,独立的聊天记录查看插件。

Miranda IM非常方便使用,而且相较于pidgin,它在windows平台更稳定。唯一可能存在的问题是,Miranda IM比较复杂,不适合懒人用,要把它配的得心应手,需要花点时间。好消息是,只要有耐心,在官方网站慢慢翻,总能找到你需要的插件。我配置好的界面:

miranda im

分类: 社会话题 标签:

笑死我了

2010年1月15日 huubby 1 条评论

在twitter上看到个笑话:

请大家在各个QQ群转发,TOTO马桶内嵌了日本人的物联网芯片,天天把中国人大便的信息传回日本,用来监测我们中国人的身体状况,是中国人的就转发,支持国货!

狗日的,不先打个招呼,差点把我笑死。

分类: 社会话题 标签:

【奇文赏析】百度首席产品设计师孙云丰评论谷歌退出中国事件

2010年1月13日 huubby 2 条评论

今天最大最劲爆的新闻就是google总部宣布考虑退出中国市场,上午百度的孙云丰同学就迫不及待跳出来表明自己的态度。结果下午又怂了,先是删除了自己百度空间里的帖子,然后又要求CSDN删除了转载帖子。不过好在伟大的推神有截图,请看这里(感谢推友@dupola),还有这里(感谢推友@Bamind)。这篇是从MSN SPACE转过来的,原文在这里

———————————————鄙视的分割线-上—————————————————

关于谷歌退出中国_在地铁站 – http://hi.baidu.com/whomi/blog/item/2b1001e9be877834b80e2df6.html
作者:百度首席产品设计师孙云丰

google宣称要退出中国,所证明的,恰恰不是市面上的那些g粉所宣称的那样,google是个”人权斗士”,而刚好反了过来,正好证明google是个市侩分子。

google的首席法律顾问的调调让我感到恶心。因经济利益退出,就直白白的说好了,把自己涂脂抹粉一番,还煞有介事的提到google被中国人攻击,中国异议分子的Gmail信箱被攻击,把这些事情作为退出中国的铺垫,这种论调是侮辱中国普通老百姓的智商,但还真有可能迎合那帮目空一切,但从未到过中国、对中国没有丝毫了解,却又喜欢对中国说三道四的西方人的假想。

只提一个假设,如果谷歌占据了中国80%的搜索市场份额,google的高管,还会这么高调的宣称要do no evil,从中国退出吗?

整个事情给我的唯一感受,就是恶心。

科普一点:

信息不对称是造成社会不平等最主要的原因之一。而对普通百姓最为关键的信息,并非中南海秘闻,而是最为常规的经济、文化、科技等领域信息。尽可能的为普通老百姓对这些领域的信息提供便捷,并消弭信息占有的不对称,这是搜索引擎存在的最大社会政治意义之一。

从这个角度而言,尽可能的设法为百姓提供便捷的信息获取技术服务,提供切实的价值,而不是挂羊头卖狗肉的宣称自己do no evil和政府撕破脸皮搞壮烈,才是一种真切的负责态度。找台阶下可以,但不要拿一个高管制国家的民众感情来做台阶,这是极其不道德的。

政治环境短期内是无法改变的。在中国,每个企业或者个人,都必须戴着镣铐跳舞。其实在别国一样,只是程度之别。但这是现实。在有限的条件下,尽可能的提供自己勉力而为的一份子,才是一个真切的做企业、做人态度。

在我博客上乱喷的兄弟,甚至还有搞笑的喷我five毛党的,都回家好好的念点书,再回来喷吧。希望看得见点水平的,而不是除了咒死爹死娘就不知道说啥的。 80年代的愤青,可不是现在这副衰样儿。

————–

以上是作为一个曾经的忠实google用户而说的,和百度无关。市面上沾沾自喜于了解一点google的产品技术细节将google奉为道德楷模而自封G 粉的兄弟,请勿跟帖瞎喷,你们根本不懂什么叫搜索引擎,什么叫自由人权。

————–

btw,评论关闭。要喷到twitter上喷吧。我的地盘不欢迎。

———————————————鄙视的分割线-下———————————————————-

读后感:最后一段话真是把我恶心坏了。鄙视没种的百度公司和更怂的孙云丰同学。

分类: 转载 标签: