您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > cppUnit
CppUnit Cookbook中文版
作者:网络转载 发布时间:[ 2014/1/2 10:04:17 ] 推荐标签:CppUnit 单元测试

TestFactoryRegistry

TestFactoryRegistry是用来解决以下两个缺陷的:
*忘了把你的fixture suite加入test runner(因为它在另外一个文件中,很容易忘)
*因为加入所有测试用例头文件造成的编译瓶颈。

TestFactoryRegistry是在初始化的时候注册suite的地方。

为了注册ComplexNumber suite,在.cpp中加入:
#include <cppunit/extensions/HelperMacros.h>

CPPUNIT_TEST_SUITE_REGISTRATION( ComplexNumber );

事实上,桌面下的动作是,一个静态的AutoRegisterSuite类型变量被声明。在构建的时候,它会注册一个TestSuiteFactory到TestFactoryRegistry。 TestSuiteFactory返回ComplexNumber::suite()返回的TestSuite。

为了运行这些用例,使用文字的test runner,我们不必包含fixture了:
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/ui/text/TestRunner.h>

int main( int argc, char **argv)
{
CppUnit::TextUi::TestRunner runner;

首先我们得到TestFactoryRegistry的实例:
CppUnit::TestFactoryRegistry ®istry = CppUnit::TestFactoryRegistry::getRegistry();
然后我们获得并添加一个由TestFactoryRegistry产生的新的TestSuite,它包含了使用CPPUNIT_TEST_SUITE_REGISTRATION()注册的所有的test suite.
runner.addTest( registry.makeTest() );
runner.run();
return 0;
}

Post-build check
好了,现在我们已经可以使测试运行了,那么把它集成到编译过程中去怎么样?
为了达到这个目的,应用程序必须返回一个非0值表明出现了错误。
TestRunner::run()返回一个布尔值来表明run()是否成功。
更新一下我们的main函数,我们得到:
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/ui/text/TestRunner.h>

int main( int argc, char **argv)
{
CppUnit::TextUi::TestRunner runner;
CppUnit::TestFactoryRegistry ®istry = CppUnit::TestFactoryRegistry::getRegistry();
runner.addTest( registry.makeTest() );
bool wasSucessful = runner.run( "", false );
return wasSucessful;
}

现在,你需要编译后运行你的应用程序。
使用 Visual C++的话,可以在Project Settings/Post-Build step中加入下面的命令。它被扩展到应用程序的执行路径。使用这个技术的时候看看project examples/cppunittest/CppUnitTestMain.dsp 中是如何设置的。

Original version by Michael Feathers. Doxygen conversion and update by Baptiste Lepilleur.

上一页12345下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd