本主题介绍如何使用 C++test 来执行自动生成和/或用户定义的 C++test 或遗留 CppUnit 测试用例。
章节目录:
C++test 可以运行并报告任何有效的 C++test 或遗留 CppUnit 测试用例的覆盖率信息。
gcc-nostdinc 选项处理 如果使用 GCC
|
运行测试用例执行的一般过程:
使用内建的“Run Unit Tests”测试配置或基于该配置的自定义测试配置启动测试。
提示 - 通过测试用例浏览器执行测试 您可以直接在测试用例浏览器(Parasoft> 显示视图> 测试用例浏览器)执行测试。只需选择测试的资源(项目、文件夹、测试套件或测试用例)在测试用例浏览器中的节点,右键点击所选内容,然后从测试历史或测试执行快捷菜单选择所需测试执行测试配置即可。 已执行的测试将通过颜色编码来表示它们的结果状态。失败的测试使用红色标记。通过的测试使用绿色标记。 |
测试模板函数 C++test 对实例化函数模板和类模板的实例化成员执行单元测试。 详细信息请参阅模板函数支持。 |
若要生成详细的覆盖率报告,在运行测试用例之前,应确保在选定的测试配置中启用生成详细的覆盖率报告 [覆盖率指标] 选项。打开测试配置,转到执行>运行时并选择该选项。 |
定期安排批处理模式回归测试可简单地执行内建的“Run Unit Tests”测试配置,或者基于该配置的自定义测试配置。
例如:
cpptestcli -data /path/to/workspace -resource "ProjectToTest" -config team://ExecuteTests -publish
有关配置批处理模式测试的更多详细信息,请参阅通过命令行界面进行测试。
C++test 可以执行测试可执行文件的试验构建,其中包括测试用例和用户桩函数,而无需执行测试。该特性可用于检查自动生成的桩函数和测试是否可以编译。即使被测试的项目中还没有任何测试用例,您也可以执行试验构建。
推荐运行内建的“Build Test Executable”测试配置来执行试验构建。
当您运行内建的“Generate Stubs”测试配置(或基于该配置的自定义测试配置)时,C++test 将自动为缺失的函数和变量定义生成可自定义的桩函数(或桩函数模板)。如执行测试用例 v2022.2 中所述,我们建议您先生成测试用例,在运行测试用例执行前,运行 Generate Stubs 测试配置,然后运行 Build Test Executable 测试配置。
当使用测试配置集运行测试来生成桩函数时,C++test 将在指定位置创建一个桩函数文件。如果 C++test 不能自动生成一个完整的桩函数定义,它将创建一个您可以自定义(通过输入相应的 return 语句、添加 include 指令等)的桩函数模板。在桩函数完成之前,桩函数模板将保存在桩函数文件中。
只有当没有其他定义(用户桩函数或原始桩函数)可用时,才会使用自动生成的桩函数。
可以根据添加和修改桩函数中的说明自定义自动生成的桩函数和桩函数模板。如果您自定义桩函数或桩函数模板,则需要重新运行分析来提示 C++test 使用自定义的设置。
创建自定义桩函数生成测试配置的步骤:
默认情况下,C++test 按以下方式计算被测文件(要测试的项目文件)和测试套件的列表:
如果希望 C++test 使用任何其他项目源文件解析来自被测试文件的原始定义,可以指定测试配置的使用来自附加的项目文件的符号选项(执行>符号选项卡)。此外,您还可以通过使用从以下位置找到的文件中的额外符号选项来指定使用哪些桩函数,并使用为每个被测试的上下文创建单独的测试可执行程序选项来指定是否希望 C++test 为每个上下文(单个源文件/头文件或项目)创建单独的测试可执行文件。
有关如何指定要使用的附加项目文件和桩函数,以及如何准备测试可执行文件的详细信息,请参阅符号选项卡。
在某些情况下,测试策略要求将单元测试应用于与其他相关组件隔离的代码。C++test 允许通过使用桩函数来执行这样的测试。
单独测试某个文件(在不同的“测试床”上,包括自定义和自动桩函数)的步骤:
单独测试文件时,您可能希望使用对象和库文件过滤器来避免测试指定的库和对象。在测试配置的忽略对象/库文件字段(执行> 符号选项卡),您可以指定以分号分隔的命令行选项模式列表。仅忽略链接器命令行中的选项。标准编译器库和通过 pragma 包含的库不会被过滤。
您可以通过多种方式单独测试函数。本节描述了经常用于测试安全关键源代码的方法。这种测试的一个基本要求是被测试的函数源代码不应该被插桩模块修改。这是为了确保测试结果反映真实生产环境中的功能执行。这是为了确保测试结果反映真实生产环境中的功能执行。
要确保被测功能未插桩,您应该验证测试配置中的插桩设置:
应只在测试源类别中启用以下功能:
以下部分将提供有关配置打桩模式、管理每个测试套件配置的桩函数以及用于单独测试功能的测试可执行配置的其他详细信息。
您必须启用桩函数插桩并选择打桩模式,才能对被测代码使用桩函数。启用桩函数插桩会激活打桩引擎。选择打桩模式定义了应用桩函数调用的方式。有两种打桩模式可用:
还有一个启用 C++ 模板桩函数的选项。详细信息请参阅使用 C++模板的桩函数。
以下示例说明了这些模式在调用桩函数或方法的方式上有何不同。
/* Original definition of function to be stubbed */ int Func(void) { // Function body } /* tested function definition */ int testedFunction(void) { int val = Func (); /* tested function body */ return val; } |
下表显示了两种打桩模式的示例源代码的插桩版本:
插桩函数调用 | 插桩被打桩的桩函数 | ||
---|---|---|---|
|
|
当测试安全关键代码时,插桩打桩的函数模式通常是首选,因为它不会改变被测功能的主体。设置桩函数模式的步骤:
以这种方式配置插桩设置会存在一些限制:
以下部分描述了如何处理这些限制。
单元测试策略有时要求组织为每个测试套件使用单独的桩函数集。这可以通过用于每个测试套件的专用测试配置来实现,或者最好通过直接在测试套件中指定期望的桩函数文件来实现。
为测试套件指定桩函数文件的步骤:
通过直接修改测试套件文件,也可以在不使用 GUI 的情况下将测试套件特定的桩函数文件添加到测试套件中。要将桩函数文件添加到测试套件中,在文本/代码编辑器中打开测试套件,并为每个桩函数文件插入以下宏。您还可以使用根目录路径来包含给定位置的所有桩函数。
CPPTEST_ADDITIONAL_STUB_FILES(<stub file path or root directory>); |
可以在任何有效的 C/C++ 宏位置指定该宏,但必须将其添加到 cpptest.h 头文件之后。在测试套件级别指定的所有桩函数文件都附加到受测试配置设置影响的桩函数文件中。
执行用户定义的测试用例集步骤:
选择相关的项目树节点。(您可以选择和执行不同测试套件中的测试用例。)
CDT 4.x 注释 对于使用 CDT 4.x 创建的 Managed C/C++ 项目,测试函数在项目树中不可用。要执行单个测试用例,则在代码编辑器中选择测试用例名称。 |
如果被测代码引用了其他文件中的符号,但 C++test 找不到这些符号,则 C++test 可能会报告链接器错误
查看哪些符号未解析的步骤:
C++test 将在编译和链接阶段之前报告未解析的符号(未定义的函数)。查看未解析符号的步骤:
有几种方法可以解析符号:
如果符号位于外部库中,应将外部库添加到链接器命令行,然后重新运行测试。详细信息请参阅更新项目。
请参阅在测试执行期间使用调试器。