Parasoft C/C++ test 自动化用户指南(十九):与 CppUnit 和 CppUtest 集成
Parasoft C/C++test针对C/C++开发的专业白盒自动化测试方案,能有效提高软件开发效率和代码质量。C++test 可以进行静态分析,全面代码审查,运行时错误检测,并在单元测试和组件测试中集成覆盖率分析。
Parasoft C/C++test 允许您运行在单元测试工具中创建的单元测试并将结果报告给 DTP。
Parasoft C/C+test 可以将使用 CppUnit 和 CppUtest 执行的测试的结果发送到 DTP 服务器,以及将测试与代码覆盖率相关联。要将 CppUnit 或 CppUtest 与 C/C++test 集成,需要将结果侦听器和覆盖注释器安装到现有的 CppUnit 或 CppUtest 基础结构中
典型的集成包括结果侦听器和覆盖注释器,它们为您提供有关测试结果和覆盖的完整信息。您可以选择仅安装结果侦听器以进行轻量级测试或比较有覆盖和无覆盖的结果。
将 C/C++test 安装到测试设置中
本节描述了 CppUnit 和 CppUtest 设置以及结果侦听器和覆盖率注释器。如果您选择仅安装结果侦听器,请跳过所有提及覆盖注释器的行。
将 C/C++test 安装到 CppUnit 安装程序中
1、在包含 CppUnit 主函数的源文件中包含一个专用的头文件:
#include "cpptest/extensions/cppunit/results_listener.h" #include "cpptest/extensions/cppunit/coverage_annotator.h"
2、安装结果监听器。安装细节将取决于您用来执行单元测试的 CppUnit 框架的 TestRunner 类。对于简单的设置,您修改后的 main 函数可能类似于以下内容:
/* required header files */ int main() { CPPUNIT_NS::Test *suite = CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest(); CPPUNIT_NS::TextUi::TestRunner runner; runner.addTest( suite ); CppTest_CppUnitResultsListener cpptestResListener; CppTest_CppUnitCoverageAnnotator cpptestCovAnnotator; runner.eventManager().addListener( &cpptestResListener ); runner.eventManager().addListener( &cpptestCovAnnotator ); runner.setOutputter( new CPPUNIT_NS::CompilerOutputter( &runner.result(), std::cout)); bool wasSucessful = runner.run(); return wasSucessful ? 0 : 1;
根据使用的类,修改的安装可能会有所不同。下面的示例显示了 CppUnit 框架的两个类的安装。CppUnit::TestRunner 类的安装:
CppUnit::TestResult controller; CppTest_CppUnitResultsListener cpptestResListener; CppTest_CppUnitCoverageAnnotator cpptestCovAnnotator; controller.addListener( &cpptestResListener ); controller.addListener( &cpptestCovAnnotator ); CppUnit::TestRunner runner; runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest() ); runner.run( controller, testPath );
CppUnit::TextTestRunner 类的安装:
CppUnit::TextTestRunner runner; CppTest_CppUnitResultsListener cpptestResListener; CppTest_CppUnitCoverageAnnotator cpptestCovAnnotator; runner.eventManager().addListener(&cpptestResListener); runner.eventManager().addListener(&cpptestCovAnnotator);
3、修改您的构建系统配置以使用以下-I选项指定 results_listener.h 头文件位置:
-I<C++test Installation Directory>/runtime/include
将 C/C++test 安装到 CppUtest 安装程序中
-
在包含 CppUtest 主函数的源文件中包含一个专用头文件。
#include "cpptest/extensions/cpputest/results_listener.h"#include "cpptest/extensions/cpputest/coverage_annotator.h"#include "cpptest/extensions/cpputest/test_runner.h" -
安装结果监听器。安装需要将覆盖注释器和结果侦听器注册到 TestRegistry 类中。它还需要使用 C++test 提供的 TestRunner。
对于简单的设置,您修改后的 main 函数可能类似于以下内容:/* required header files */int main(){ // Register C++Test cpputest pluginsTestRegistry* registry = TestRegistry::getCurrentRegistry(); TestPlugin* coverageAnnotator = new CppTest_CppUtestCoverageAnnotator(); registry->installPlugin(coverageAnnotator);TestPlugin* resultsListener = new CppTest_CppUtestResultsListener();registry->installPlugin(resultsListener);// run the testsint result = CppTest_CppUtestTestRunner::RunAllTests(ac, av);delete coverageAnnotator;delete resultsListener;return result; -
修改您的构建系统配置以使用以下 -I选项指定 results_listener.h 头文件位置:
-I<C++test Installation Directory>/runtime/include
报告 CppUnit 和 CppUtest 测试结果
结果侦听器可以记录单元测试执行结果并将数据存储在文件中。默认情况下,执行结果存储在当前工作目录的 cpptest_results.utlog 文件中。您可以通过将路径作为参数提供给 CppTest_CppUnitResultsListener (CppUnit) 或 CppTest_CppUtestResultsListener (CppUtest) 构造函数来更改默认文件位置:
-
对于 CppUnit
CppTest_CppUnitResultsListener cpptestResListener("c:/myworkspace/cpptest_results.utlog"); -
对于 CppUtest
CppTest_CppUtestResultsListener cpptestResListener("c:/myworkspace/cpptest_results.utlog");
或者,您可以使用以下定义在测试工具构建过程中指定位置:
-DCPPTEST_UT_LOG_FILE=\"c:/home/my_workspace/cpptest_results.utlog\"
|
如果您选择更改默认文件位置,请务必保留.utlog文件扩展名。
一旦构建了带有结果侦听器的测试可执行文件,您就可以执行预定的单元测试。在标准设置中,测试执行期间生成的 cpptest_results.utlog 文件将放置在包含可执行文件的目录中。如果修改了文件路径,文件将在指定位置创建。
单元测试执行结果可以发布到 DTP 服务器或可以使用以下命令行生成本地报告:
cpptestcli -config "builtin://Unit Testing" -input <result_filename>.utlog -publish -report local_report
|
单元测试执行结果通常与代码覆盖率结果相结合。
将测试与代码覆盖率相关联
您可以使用测试开始/停止信息自动注释代码覆盖率结果。这允许您有选择地分析由特定测试或一组测试生成的代码覆盖率。将测试与代码覆盖率相关联需要安装覆盖率结果注释器和结果侦听器,以及 C/C++test。
覆盖注释器将特殊标记添加到代码覆盖结果流中。这些标记界定了每个测试用例的覆盖结果。覆盖注释器将标记添加到覆盖结果文件中,该文件由 C/C++test 管理。注释器不需要任何输入参数。
一旦安装了带有结果侦听器的测试可执行文件,您就可以执行预定的单元测试。在标准设置中,在测试执行期间生成的 cpptest_results.clog 文件和 cpptest_results.utlog 文件将放置在当前工作目录中。
运行以下命令以生成本地报告并启用对 DTP 服务器上的代码覆盖率的选择性分析:
cpptestcli -config "builtin://Unit Testing" -input cpptest_results.utlog -input cpptest_results.clog -publish -report local_report
|
Parasoft——领先的自动化测试工具,满足绝大多数行业标准
Parasoft是一家专门提供软件测试解决方案的公司,帮助企业打造无缺陷的软件。
从开发到质量检查,Parasoft的技术通过集成静态和运行时分析,单元、功能和API测试,以及服务虚拟化,在不牺牲质量和安全性的情况下加快软件交付,节约交付成本。
强大的报告和分析功能可帮助用户快速查明有风险的代码区域,并了解新代码更改如何影响其软件质量,而突破性的技术将人工智能和机器学习添加到软件测试中,使组织更容易采用和扩展跨开发和测试团队的有效的软件测试实践。
Parasoft针对C/C++、Java、.NET和嵌入式的开发测试都有着30多年的深入研究,很多全国500强企业使用Parasoft的产品实现了软件快速、高质量的交付。
获取Parasoft资料或申请试用可加QQ:2867205852