背景 相关:
STL:标准模板库 ,有六大组件:容器、迭代器、算法、仿函数、迭代适配器、空间配置器
Design Pattern:
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。
CppUnit的总体构成:
core:核心部分;
output:输出管理;
helper:一些辅助类
extension:作为单元测试的延伸;
listener:监视测试进程和测试结果;
textui:运行单元测试的文本环境;
portability:对于不同平台的移植设置
核心core类的分析------——基本测试类
最基本的pattern:Composite Pattern,
将对象组合成树形结构以表示“部分-整体”的层次结构。
在Cppunit中,测试类分为两种:耨写测试类包含了单个测试,比如testcase,某些包括了若干测试类,比如test suit。
彼此相关的test case组合成一个test suit。testsuit之间也可以相互嵌套包含。
testcase 是leaf test suit 是composit。
[Test] 所有测试的抽象基类,规定了所有测试类应该具有的行为,对应composite pattern
中的component:
1>virtual dtor 虚析构函数;
2>virtual void run(TestResult *result)=0 运行测试内容并搜集测试结果;
3>virtual int countTestCases () const =0; 返回包含的测试对象的个数如果为TestCase 就返回1;
4>virtual std::stringn getName() const=0; 返回测试的名称,每个测试都有一个名称
中的component:
1>virtual dtor 虚析构函数;
2>virtual void run(TestResult *result)=0 运行测试内容并搜集测试结果;
3>virtual int countTestCases () const =0; 返回包含的测试对象的个数如果为TestCase 就返回1;
4>virtual std::stringn getName() const=0; 返回测试的名称,每个测试都有一个名称
[TestFixture]
也是一个抽象类,用于包装测试类 有setup tearDown 方法,利用其为测试提供所需的共用环境。
定义实例变量形成Fixture 重载setup 初始化Fixture 重载teardown 用于测试结束后资源回收工作
[TestCase]
派生自Test和TestFixture(多重继承),具备两者特性,用于实现一个简单额测试用例。
TestCase中最重要的是run 方法。
run(TestResult *result)
{
result->startTest(this);
try{
设置fixture,具体内容交给派生类解决;
可能产生异常
setUP();
runTest 具有protect性质 是真正执行测试的函数,但具体行为留给派生类解决
try{
真正进行测试
runTest();}
catch(e)
{Exception *copy=e.clone();
result->addFailure(this, copy);}
}
catch{异常处理}
catch(....){包含所有其他的异常处理}
try(){其他}
}
TestCase中最重要的是run 方法。
run(TestResult *result)
{
result->startTest(this);
try{
设置fixture,具体内容交给派生类解决;
可能产生异常
setUP();
runTest 具有protect性质 是真正执行测试的函数,但具体行为留给派生类解决
try{
真正进行测试
runTest();}
catch(e)
{Exception *copy=e.clone();
result->addFailure(this, copy);}
}
catch{异常处理}
catch(....){包含所有其他的异常处理}
try(){其他}
}
在这里 run定义了一个测试类的金额行为和顺序:setup准备 runtest开始 tearDown 结束
testcase 无法确定测试的具体行为留给派生的类解决
testcase 无法确定测试的具体行为留给派生的类解决
[TestSuit]
一组相关联的测试用例构成了一个测试包testsuit。同样派生自test没有fixture。testsuit
维护了一个private的测试对象数组。
vector<Test *>m_tests;
const string m_name;
一组相关联的测试用例构成了一个测试包testsuit。同样派生自test没有fixture。testsuit
维护了一个private的测试对象数组。
vector<Test *>m_tests;
const string m_name;