下面是CPPUnit的一个简单例子.
class SimpleCalcTest : public CPPUNIT_NS::TestFixture
{
CPPUNIT_TEST_SUITE( SimpleCalcTest );
CPPUNIT_TEST( testAdd );
CPPUNIT_TEST( testSub );
CPPUNIT_TEST( testMul);
CPPUNIT_TEST( testDiv );
CPPUNIT_TEST_SUITE_END();
private :
SimpleCalculator * sc;
public:
virtual void setUp()
{
sc = new SimpleCalculator();
}
virtual void tearDown()
{
delete sc;
}
void testAdd(){
CPPUNIT_ASSERT_EQUAL( sc->add(5,6), 11);
}
void testSub(){
CPPUNIT_ASSERT_EQUAL( sc->sub(5,6), -1 );
}
void testMul(){
CPPUNIT_ASSERT_EQUAL( sc->mul(5,6), 30 );
}
void testDiv(){
CPPUNIT_ASSERT_EQUAL( sc->div(12,6), 2 );
}
};
// 把这个TestSuite注册到名字为"alltest"的TestSuite中, 如果没有定义会自动定义
// 也可以CPPUNIT_TEST_SUITE_REGISTRATION( MathTest );注册到全局的一个未命名的TestSuite中.
CPPUNIT_TEST_SUITE_REGISTRATION( SimpleCalcTest, "alltest" );
int main()
{
CPPUNIT_NS::TestResult r;
CPPUNIT_NS::TestResultCollector result;
r.addListener( &result );
// 从注册的TestSuite中获取特定的TestSuite, 没有参数获取全局的未命名的TestSuite.
CPPUNIT_NS::TestFactoryRegistry::getRegistry("alltest").makeTest()->run( &r );
CPPUNIT_NS::TextOutputter out( &result, std::cout );
out.write();
return 0;
}
从上面的代码可以看到, 使用CPPUnit 主要是两个步骤:
1. 创建TestSuite
首先从CPPUNIT_NS::TestFixture 生成一个子类, 然后用宏 CPPUNIT_TEST_SUITE, CPPUNIT_TEST, CPPUNIT_TEST_SUITE_END 来定义要测试的各个小单元, 并且实现CPPUNIT_TEST 中定义的类函数; 在每个类函数中使用 CPPUNIT_ASSERT, CPPUNIT_ASSERT_MESSAGE, CPPUNIT_FAIL, CPPUNIT_ASSERT_EQUAL, CPPUNIT_ASSERT_EQUAL_MESSAGE, CPPUNIT_ASSERT_DOUBLES_EQUAL 等来对结果进行断言.
然后通过宏 CPPUNIT_TEST_SUITE_REGISTRATION 将测试类注册到TestSuite中.
2. Main
在main程序中对TestSuite 进行测试.
CPPUnit的更详细的资料可以查看:
IBM 的
便利的开发工具 CppUnit 快速使用指南 比较详细的介绍了CppUnit
VCKBase的
CppUnit测试框架入门 详细的介绍了VC6下MFC Dialog下的CPPUnit的使用
CSDN 的
如何使用CppUnit做单元测试 介绍了VC6的MFC 下的CPPUnit的使用, 和VCKBase的实现稍微有点差别
Meng Yan ( 孟岩 ) 的文章
CPPUnit Lite 对CPPUnit的使用和宏进行了简单的分析