主要是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 ):主要就是为了生成一个suite函数。 然后在cpp文件中,输入
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
CPPUNIT_TEST_SUITE_REGISTRATION( MyTest );展开为
static CppUnit::AutoRegisterSuite< ATestFixtureType > /主要是把Testcase自动注册。得到CppUnit::TestFactoryRegistry::getRegistry(),然后把TestSuiteFactory<TestCaseType>注册到这个registry中,TestSuiteFactory定义如下
__CPPUNIT_MAKE_UNIQUE_NAME(__autoRegisterSuite )
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