速成者,囫囵吞枣也,不究其精要,只探其皮毛。今天花了两个小时研究了一下CppUnit,大体上了解到了CppUnit的框架和简单的使用方法,记述如下:
研究了一下CppUnit的源码,本想把它的框架类图画出来的,可是Together无论如何搞不定。只好作罢。那么就说说怎么用吧。回头有时间再来把它的源码架构说明一下。
(一)、在console程序内部使用CppUnit
1、建立一个继承自CppUnit::TestFixture的类,类的声明的开始部分使用CppUnit的预定义的宏CPPUNIT_TEST_SUITE和CPPUNIT_TEST_SUITE_END来声明一个TestSuite。具体格式如下(必须包含cppunit/extensions/helpermacros.h才能正确的使用下面提到的宏):
class TestOfDummy : public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(TestOfDummy);
... //some test here, refer to point 2.
CPPUNIT_TEST_SUITE_END();
public:
... //your class definition
};
2、在该类内部建立成员方法用作测试用例,并在类声明中的CPPUNIT_TEST_SUITE和CPPUNIT_TEST_SUITE_END之间添加CppUnit预定义的宏CPPUNIT_TEST来声明一个测试。具体格式如下:
in .h file
class TestOfDummy : public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(TestOfDummy);
CPPUNIT_TEST(testEqual);
... //other tests
CPPUNIT_TEST_SUITE_END;
public:
void testEqual();
... // other member functions
};
in .cpp file
#include
#include
void TestOfDummy::testEqual(){
CPPUNIT_ASSERT( 1 == 1);
... //other asserts
}
3、在类的实现(通常在cpp文件中)的开始部分添加CppUnit预定义的宏CPPUNIT_TEST_SUITE_REGISTRATION来注册这个TestSuite。具体格式如下:
in .cpp file
#include
#include
CPPUNIT_TEST_SUITE_REGISTRATION(TestOfDummy);
void TestOfDummy::testEqual(){
CPPUNIT_ASSERT( 1 == 1);
... //other asserts
}
4、在main方法中通过CppUnit提供的方法得到这个已注册的TestSuite,并把这个suite加到一个TestRunner中(在console程序中,一般使用TextUi::TestRunner),然后调用该TestRunner的run方法运行这个suite的测试。具体格式如下:
using CPPUNIT_NS::Test;
using CPPUNIT_NS::TestFactoryRegistry;
using CPPUNIT_NS::TextUi;
int main(int argc, char* argv[]) {
Test *suite = TestFactoryRegistry::getRegistry::makeTest();
TextUi::TestRunner runner;
runner.addTest(suite);
runner.run();
}