转贴于
http://www.18ie.com/wordpress/?p=25
看了好几天cppunit,代码读着真难受,简直让人恶心。 好几次,都想放弃用cppunit了,也不知道cppunit到底有何方便的,一帮子人在吹,到底谁在实践中用过? 还不如自己用assert()写测试,来的方便、快捷,容易读。 今天,总算找到一个容易明白些的例子,分析并写一下自己的体会 :
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 );
}
};
CPPUNIT_TEST_SUITE_REGISTRATION( SimpleCalcTest );
主函数如下:
int main()
{
CPPUNIT_NS::TestResult r;
CPPUNIT_NS::TestResultCollector result;
r.addListener( &result );
CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest()->run( &r );
CPPUNIT_NS::TextOutputter out( &result, std::cout );
out.write();
return 0;
}
我对这段代码的理解:
理解1) 主函数,天生就是这个样子,里面怪异的语句,不用去理解,也不用改动,除非你不怕浪费脑细胞,想去研究cppunit的内部结构。
理解2)实际应用时,需要把要测试的类名换成自己的类名,修改2点:
SimpleCalculator * sc;
sc = new SimpleCalculator();
把要测试的类名SimpleCalculator,换成自己的类名。
至于SimpleCalcTest (如果你和我一样懒,连这个类名也不用动)
理解3)如果想新加一个测试例,只需要2步:
1)增加 CPPUNIT_TEST( testNew);
2) 增加 void testNew(){
CPPUNIT_ASSERT_EQUAL( sc->mul(5,6), 30 ); //自己修改
}
这些只是我看代码的体会,在自己脑子里转来转去的“悟道”,还没有在真实的开发环境中检验。
看客当心被我“误导”呀。
马飞涛
另外一个mfc dialog 类型的测试用例:
http://codeproject.com/library/Using_CPPUnit.asp?print=true
http://www.opensourcetesting.org/unit_c.php