cppunit

cppunit

主要结构

主要是Test和TestResult的交互,Test是一个接口,可能不只 一个测试,他里面可能包含好多的测试,TestResult是用 来得到测试结果的接口。TestResult是用来收Test的信息的, 把结果delege到TestListener。 TestCase是有TestFixture的Test。用户的测试主要是从TestCse继承。 TestSuite是一些Test的集合,实现Compsite模式。

自动注册

junit用映射来得到TestCase中的test*方法,cppunit如何做! 如何自动注册!

生成suite函数.在一个从Testcase继承的类中,要把test函数注册,生成 suite函数。一般如下:

   CPPUNIT_TEST_SUITE( MyTest );
CPPUNIT_TEST( testEquality );
CPPUNIT_TEST( testSetName );
CPPUNIT_TEST_SUITE_END();
宏展开后,如下:
 CPPUNIT_TEST_SUITE( ATestFixtureType ):
private: /
typedef ATestFixtureType __ThisTestFixtureType; /
class ThisTestFixtureFactory : public CppUnit::TestFixtureFactory /
{ /
virtual CppUnit::TestFixture *makeFixture() /
{ /
return new ATestFixtureType(); /
} /
}; /
public: /
static void /
registerTests( CppUnit::TestSuite *suite, /
CppUnit::TestFixtureFactory *factory ) /
{ /
CppUnit::TestSuiteBuilder<__ThisTestFixtureType> builder( suite );

CPPUNIT_TEST:
builder.addTestCaller( #testMethod, /
&__ThisTestFixtureType::testMethod , /
(__ThisTestFixtureType*)factory->makeFixture() )

CPPUNIT_TEST_SUITE_END:
builder.takeSuite(); /
} /
static CppUnit::TestSuite *suite() /
{ /
CppUnit::TestSuiteBuilder<__ThisTestFixtureType> /
builder __CPPUNIT_SUITE_CTOR_ARGS( ATestFixtureType ); /
ThisTestFixtureFactory factory; /
__ThisTestFixtureType::registerTests( builder.suite(), &factory ); /
return builder.takeSuite(); /
} /
private: /* dummy typedef so that the macro can still end with ';'*/ /
typedef ThisTestFixtureFactory __ThisTestFixtureFactory
主要就是为了生成一个suite函数。 然后在cpp文件中,输入
CPPUNIT_TEST_SUITE_REGISTRATION( MyTest );
展开为
  static CppUnit::AutoRegisterSuite< ATestFixtureType >          /
__CPPUNIT_MAKE_UNIQUE_NAME(__autoRegisterSuite )
主要是把Testcase自动注册。得到CppUnit::TestFactoryRegistry::getRegistry(),然后把TestSuiteFactory<TestCaseType>注册到这个registry中,TestSuiteFactory定义如下
  template<class TestCaseType>
class TestSuiteFactory : public TestFactory
{
public:
virtual Test *makeTest()
{
return TestCaseType::suite();
}
};

就是调用上面生产的suite函数.

也可以用CPPUNIT_TEST_SUITE_NAMED_REGISTRATION注册一个有名称的东西,如repeat 可以再Testruner得到它,用TestRepeater来运行多次。 再在main函数中得到所以自动注册的Test

CppUnit::TestFactoryRegistry::getRegistry().makeTest()
总结一下:在Testcase中,用CPPUNIT_TEST_SUITE_REGISTRATION生成一个static的AutoRegisterSuite变量, 他的构造函数自动建立一个TestSuiteFactory变量,注册到TestFactoryRegistry中,在main函数中 到调用TestFactoryRegistry.maketest的时候,调用TestSuiteFactory的maktetest函数,他调用Testcase的suite 函数,得到TestSuite

注意

用cppunit的repeattest不能测试是否有内存leak,因为它自己就会吃内存

tips

可以用下面的宏做一些事情, CPPUNIT_ASSERT_THROW,CPPUNIT_ASSERT_NO_THROW,CPPUNIT_ASSERT_ASSERTION_FAIL, CPPUNIT_ASSERT_ASSERTION_PASS

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值