CppUnit 笔记

2010年11月07日 19:39

 

最近在重写一个私人项目,为了提高项目质量,决定使用CppUnit做单元测试。 CppUnit已久仰大名,但由于之前主要做C的项目,使用的都是自己写的 ASSERT库,因此刚一上手时对CppUnit的一些概念的理解比较乱,不过在第N遍阅 读Cookbook后还算是理清了一些概念。

1 TestCase, Fixture and Suit

Cppunit通过上面三个概念(类)来组织测试用例。一般来说,一个Fixture包含 了N个TestCase,而一个Suit又包含了N个Fixture。用图表示就是下面这样: 

2 Helper Macros

在Helper Macros出现之前,把N个case加到一个suit里是一件非常机械的事, 它不仅要求为一个Fixture子类提供一个静态的suit()函数成员,它还意味着重 复写个类似于

suite.addTest( 
             new CppUnit::TestCaller<ComplexNumberTest>( "testEquality",
                                                         &ComplexNumberTest::testEquality )
             );

的代码,而这种代码一旦多了就容易造成笔误。因此 CppUnit提供了一些宏如 CPPUNIT_TEST_SUITECPPUNIT_TEST_EXCEPTION 等来帮助开发人员减少这 种情况的发生。 使用 CPPUNIT_TEST_SUITE 后,写成:

CPPUNIT_TEST( testEquality )

就行了。

3 TestFactoryRegistry

TestFactoryRegistry的存在是为了解决两个问题:

  • 忘记将某个fixture添加进suit
  • 有多少个suit就有多少个#include (一般一个suit放到一个文件里)