TDD相信很多人都了解,它是敏捷软件开发中不可缺少的一个环节,能使你编写出更高质量,使你更放心的代码(当然,并不是指使用了TDD之后,就不会出现bug,呵呵,你懂的……)
那么,要使用TDD就要有一个测试框架,所以,在C++环境中,一个简单使用的单元测试框架CppUnit会为你帮上不少的忙
我对CppUnit的学习是从下面的文章中学习到的:
MFC UI界面的:http://www.vckbase.com/document/viewdoc/?id=1762
一个普通Cmd界面的:http://www.cs.nmsu.edu/~jeffery/courses/371/cppunit/cppunit_cookbook.html
下面是这两天来对CppUnit的学习记录:
首先,在CppUnit中的架构是:
TestRunner->TestSuite->TestCase
//这里说的名字是对应着CppUnit中的类的,但并是代表在其对应的层次上就只可以使用这个类,对应的层次上有各种其他可能适合大家的类,相信这三个会是使用的比较多的(还有一个是TestFixture吧,也十分常用)
TestRunner主要充当调用者的角色(从名字上可以理解到吧)
TestSuite主要充当着一个封包的角色,即将你所有的test cases都包在一起(不单止是test cases,它同样可以包含一个suite的)
TestCase主要充当一个测试用例,如你要测试:
void testFalse()
{
CPPUNIT_ASSERT(1!=2);
}
这个testFalse就是一个case,Suite就是包含大量这些case的合集(可能还有更多更深的含义,在下并无深入学习,就这是我自己的理解)
下面是一个简单的例子:
//这里使用到许多HelperMarco.h中的宏,通常如果只是使用CppUnit的话,没有必要这道这些Marco实现是怎样的,知道怎么用就可以了,这是我的理解
这里是模仿cppunit_cook_book中的例子:
首先需要一对C++文件:ComplexTest.h/cpp //顾名思义就是对Complex类的测试文件
由于在这个时候运行肯定会错的,所以不断进行修改,让编译通过,所有的CPPUNIT_ASSERT()通过就是我们的任务了,这里就开始要体现到TDD的威力了,而CppUnit也已经为我们打下了坚实的基础了!!!它让我们知道我们哪里错了!要做哪些事情,要定义一些怎样的接口等,不单止为我们日后维护提供保障,对我们code层面上的设计都是十分有帮助的,这些都是需要我们不断从编码时间中得到的!!!!
对于Complex的实现这里就不贴出代码了,自己实现吧,哈哈!
原文链接:https://www.f2er.com/javaschema/287323.html