CPPUNIT的测试对象的类关系图:
Test:所有测试对象类的抽象基类,主要是定义run方法和统计子对象个数和查找遍历子对象的方法;
TestFixture:该类非常简单,只定义了两个方法setUp和tearDown,作为测试对象的准备和拆除方法,一般用户编写的测试类都直接继承它;
TestComposite、TestLeaf:根据设计模式中组合模式而设计的两个类,都继承自Test;
TestSuite:具体化了TestComposite的内容存储方式、添加子对象接口等等。该类对象包含了若干测试对象,作为测试对象的容器,而且可以嵌套;
TestRunner: 控制测试对象的构造和测试对象执行的类;
TestCase: 定义了一个测试对象要实现的具体接口,同时继承TestFixture的setUp和tearDown;
接口
TestCaller: 使用了设计模式中的策略模式,作为测试对象的最终封装类,提供了测试运行的策略,在测试执行中扮演了重要的角色。它是一个模板类。
2) 信息收集与显示族
CPPUNIT的测试信息收集与显示的类关系图
Outputter:是所有测试输出类的抽象基类,定义了write方法;
CompilerOutputter:以编译器信息类似方式输出测试信息,使用TestResultCollector获取测试信息;
TextOutputter:以文本流的方式输出测试信息,同样使用TestResultCollector获取测试信息;
TestListener:以设计模式中观察者模式定义了Observer所应该具有的从TestResult获取测试步骤信息的方法;
TestSuccessListener:实现了TestListener接口,同时继承了SynchronizedObject了从而具有线程安全性;
SynchronizedObject:该类实现了lock和unlock操作;
ExclusiveZone:使用SynchronizedObject进行了临界区的加锁和解锁操作;
TestResult:这个测试信息的收集者,在观察者模式中扮演Subject角色,是它把测试的各个步骤的信息通知到所有Listener对象的。
3)测试对象管理族
CPPUNIT测试对象管理类关系图
TestFactory:运用了设计模式中工厂设计模式,这里只定义了一个makeTest方法,是一个抽象基类;
TestSuiteFactory:该类继承自TestFactory,而且是模板类,是生成TestSuite对象的工厂;
TestFactoryRegistry:管理TestFactory对象的类(这里继承自TestFactory个人感觉有点不太恰当);
AutoRegisterSuite:模板类,自动把特定的TestSuiteFactory对象注册到TestFactoryRegistry对象;
TestSuiteBuilderContextBase、TestSuiteBuilderContext:用于构建测试对象的类,详细见代码分析部分。