在测试期间,C++test 将根据所选测试配置的执行选项卡中定义的参数执行生成和用户定义的测试(或在启用运行时覆盖率监控的情况下运行应用程序)
执行选项卡具有以下设置:
- 启用测试执行:控制 C++test 在启用运行时覆盖率监控的情况下执行可用的单元测试或运行应用程序。如果未勾选此选项,则无法配置所有其他测试执行参数。
常规选项卡
- 执行模式> 应用程序监控:配置 C++test 准备应用程序可执行文件的插桩版本,然后运行(例如,用于运行时错误检测,如运行时错误检测中所述)。
- 执行模式> 单元测试:配置 C++test 执行单元测试。
- 执行细节> 插桩模式:控制在执行期间测试用例/应用程序插桩的程度。提供的预设值包括:
- 完全:提供完整的插桩,包括覆盖率、函数桩函数、栈追踪报告、私有成员访问权限以及重命名“main”函数。这些插桩选项在自定义插桩选项的描述下方有所说明。
- 带有内存监测的完全运行时:提供完整的插桩模式,并在单元测试执行期间对测试可执行文件进行插桩以检测运行时错误。
- 带有行覆盖率的完全运行时:提供仅包含行覆盖率的完全插桩模式。禁用行记录数。
- 不带覆盖率的完全运行时:提供部分插桩,包括函数桩函数、栈追踪报告、私有成员访问权限以及重命名“main”函数——但不包括覆盖率。
- 不带桩函数的完全运行时:提供部分插桩,包括覆盖率、栈追踪报告、私有成员访问权限以及重命名“main”函数——但不包括函数桩函数。
- 应用程序完全监测:对完整的应用程序进行插桩,同时支持运行时错误检测和覆盖率追踪。如果在内存有限的嵌入式设备上运行测试,您可能无法同时使用覆盖率和内存监测;在这种情况下,您可以在以下两种模式之间切换。
- 应用程序覆盖率监测:对完整的应用程序进行插桩,支持覆盖率追踪。
- 应用程序内存监测:对完整的应用程序进行插桩,支持运行时错误检测和覆盖率检测。
- 没有插桩:不会进行插桩。不会追踪覆盖率信息,也不会使用函数桩函数。
- 自定义插桩:点击编辑自定义插桩的级别,并从下拉菜单选择自定义插桩来启用您的设置。
下表描述了可以为测试源、附加源和测试用例源启用/禁用的插桩功能:
C/C++ 代码覆盖率:控制是否追踪覆盖率信息。“测试用例源”(独立测试套件)的覆盖率插桩对包含的头文件中的内联函数而言是必需的。 C++test 不会对测试用例函数进行覆盖率插桩。
堆栈跟踪报告:控制是否报告堆栈跟踪回调。如果禁用,报告的堆栈跟踪信息将不会显示具体正在执行的行,并且会缺少未打桩的函数调用。
访问私有成员:控制测试用例中是否使用私有成员(例如,调用私有函数、使用私有构造函数创建对象、在测试用例前置条件中设置私有字段以及在后置条件中检查私有字段的值)。
函数打桩:控制单元测试中是否使用安全定义(由 C++test 提供)和用户定义的桩函数。
重命名 main() 函数:控制是否测试包含“main()”函数的代码。如果启用,C++test 将在插桩时重命名该函数。重命名的必要性在于 C++test 自己提供了用于执行测试用例的“main()”函数。如果禁用此选项,并且被测代码包含“main()”函数,在测试可执行文件链接阶段会出现由多重定义的“main”符号引起的错误。当您在“应用程序监控”模式下工作时,应禁用此模式。
内存监测:控制是否启用内存相关问题的运行时错误检测。
汇编代码覆盖率:控制是否跟踪汇编覆盖率信息。请参阅汇编代码覆盖率。
- C/C++ 代码覆盖率指标部分允许选择覆盖率指标的类型。行记录数选项控制是否计算行的执行数。有关指标类型的更多信息,请参阅了解覆盖率类型。
- 选择启用 C++ 模板的覆盖率选项可从 C++ 模板收集代码覆盖率信息。请参阅从 C++ 模板收集代码覆盖率。
- 选择启用 constexpr 函数的覆盖率选项可从 'constexpr' 函数收集代码覆盖率信息。请参阅 C++ 常量表达式支持。
- 选择在编译时已知判定结果的情况下,忽略判定/分支点选项可在编译时知道判定结果的情况下忽略判定/分支点。请参阅在编译时已知判定结果的情况下忽略判定/分支点。
选择优化覆盖率(仅针对应用程序监测)选项可启用特殊的优化覆盖率模式,如下表所述:
选项 目的 覆盖率插桩> 大小优化 优化覆盖率插桩用于存储指标数据的内存缓冲区,尽可能占用更少的 RAM。该模式适用于内存有限的嵌入式设备。 覆盖率插桩> 速度优化 优化代码覆盖率插桩用于存储指标数据的内存缓冲区,尽可能降低执行时间开销。该模式适用于测量对额外执行时间开销容忍度较低的应用程序的覆盖率。 启用数据一致性检查 此选项提供检测覆盖率缓冲区损坏的额外算法。如果覆盖率缓冲区损坏可能是由被测应用程序中的错误行为引起的,则应启用此选项。启用此选项会带来一些额外的执行时间开销。 启用覆盖率内存缓冲区初始化 该选项强制初始化代码覆盖率插桩使用的内存缓冲区。如果您的编译器在程序开始运行之前没有将全局变量和静态变量初始化为 0(ISO C 标准要求),则应选择此选项。如果同时启用“大小优化”覆盖率插桩模式和“启用数据一致性检查”,此选项将自动启用(无法禁用)。
启用枚举数据自动生成:控制是否收集与枚举相关的 API 宏所需的枚举数据(详细信息请参阅处理枚举值)。
- 执行细节> 测试执行流程:控制 C++test 是否将默认流程用于基于主机的单元测试、构建测试可执行文件(例如,没有执行的试验构建)、为缺失的函数和变量定义生成桩函数或自定义流程(例如,嵌入式或其他跨平台测试)目的。自定义测试执行流程中详述了定义自定义流程的信息。
执行细节> 快速执行模式:配置 C++test,使其在验证测试可执行子产物是否处于最新状态(例如,自上次运行以来是否发生变化)方面要求更低。
提示:什么情况下使用快速执行模式
“快速执行模式”可用于减少准备测试可执行文件所需的时间。由于 C++test 在验证测试可执行子产物是否处于最新状态时不那么严苛,因此测试可以更快准备完成。
在此模式下,C++test 假定自上次运行以来未修改以下内容:
•编译器和链接器选项。
•头文件。
•桩函数配置。
我们建议通过以下方式使用快速执行模式:
1.复制“正常”模式的测试配置并启用快速执行模式复选框来创建“快速”执行测试配置。
2.两种测试配置的使用场景:
•在服务器机器上运行测试(夜间测试)时,使用“正常”测试配置。
•在开发人员机器上运行测试时(日常工作),使用“快速”测试配置。
开发人员机器上需要使用正常执行模式的情况:
•项目中的编译器/链接器标志已更改(例如,编译器选项中添加了新的宏定义,或者链接器标志列表中添加了新的外部库)。
•被测源/测试套件源/桩函数源包含的其中一个头文件被修改。
•项目中添加了一个新的用户桩函数。
•从项目中删除了桩函数定义。
•需报告覆盖率数据。
在使用“正常”配置重新构建测试可执行文件之后,您可以回到“快速”模式。
- 单元测试> 测试套件文件的搜索模式:控制 C++test 在当前测试中查找需执行的测试套件文件的位置。如需指定多个位置(例如,您有用于不同测试级别或主机与目标的不同测试),应在每个附加的位置前输入一个分号。
- 支持以下变量(示例基于被测文件 /MyProject/module1/src/MyClass.cpp)
- ${source_name} - 测试文件的全名(MyClass.cpp)
- ${source_base_name} - 被测文件的基本名称(MyClass)
- ${source_ext} - 被测文件的扩展名(cpp)
- ${source_loc} - 被测文件面向工作空间的位置(/MyProject/module1/src)
- ${source_loc_rel} - 被测文件的项目相对位置(module1/src)
- ${source_loc_rel:<path>} - <path> 被测文件的相对位置(对于 <path>=/MyProject/module1 为 src)
${test_ext} - 测试套件文件(.cpp)的 C++test 特定扩展名
•${project_loc} - Eclipse 项目位置(包含 .project 文件的位置)的路径。如果您的项目有“链接的”源文件夹(实际不存在于您的项目位置中的源文件),则不要使用此变量。•${resource_loc} - 特定项目资源的路径。例如,${resource_loc:/MyProject/linked_src_dir/source.cpp} 将解析为 C:\src\source.cpp。如果您的项目有“链接的”源文件夹(实际不存在于您的项目位置中的源文件),则可以使用此变量。例如:如果您的项目有“链接的”源文件夹(实际不存在于您的项目位置中的源文件),则不要使用此变量。项目树中必须有测试套件。
如果不想将测试存储在项目目录中,可以添加一个文件夹,与存储在文件系统中的其他位置的文件链接。操作步骤:•选择文件> 新建> 文件夹(如果没有此选项,则选择文件> 新建> 其他,选择常规>文件夹,然后点击下一步)。•点击高级按钮。•启用链接到文件系统中的文件夹选项。•输入或浏览源文件的位置。•点击完成。
- 支持以下变量(示例基于被测文件 /MyProject/module1/src/MyClass.cpp)
- 单元测试> 为每个被测试的上下文创建单独的测试可执行程序:控制 C++test 是否为每个被测试的上下文(例如,文件)使用单独的测试可执行文件。
- 如果启用此选项,C++test 将为每个源文件创建并执行一个单独的可执行文件(但仍将使用在符号选项卡中定义的项目源和桩函数)。将为所有未设置 CPPTEST_CONTEXT 的测试准备并运行一个额外的测试可执行文件。如果您喜欢较小的测试可执行文件,可启用此选项。
- 如果禁用此选项并且为单元测试执行选择了完整的项目,C++test 将构建一个包含所有源文件的大型可执行文件并运行一次。
符号选项卡
库符号识别模式
该部分详细说明 C++test 如何创建应在准备测试可执行文件提供(例如,在外部库中)的原始符号定义列表(例如,对于函数或全局变量)。
- 关闭:C++test 不会尝试查找符号定义,而是假设链接阶段提供了所有必要的符号。
- 自动:C++test 会自动尝试创建链接过程中应使用的原始符号定义列表。
符号资源
- 使用来自附加的项目文件的符号: 定义 C++test 应使用的任何项目源文件——除了默认使用的文件(如下面第一点中指定的)——来解析被测文件中的原始定义。
- 默认情况下,C++test 按以下方式计算被测文件(要测试的项目文件)和测试套件的列表:
- 所有选择的测试套件以及与执行> 常规选项卡的测试套件文件的搜索模式选项中指定的条件匹配的测试套件都将执行。如果测试套件文件使用 CPPTEST_CONTEXT 和/或 CPPTEST_INCLUDED_TO 宏,则相应的源文件和头文件将成为被测文件。
- 所有选定的项目源文件和头文件都将成为被测文件。此外,C++test 将通过测试套件文件的搜索模式位置搜索 CPPTEST_CONTEXT 设置为这些被测文件之一的测试套件文件;如果找到这样的测试套件文件,它们也将被执行。
- 可以使用以下 C++test 变量指定要使用的其他项目文件的路径:
${project_loc}
解析为Eclipse项目位置的路径(包含.project
文件的位置)。如果您的项目有“链接的”源文件夹(实际不存在于您的项目位置中的源文件),则无法使用此变量。${resource_loc}
解析为特定项目资源的路径。例如,${resource_loc:/MyProject/linked_src_dir/source.cpp}
将已解析为C:\src\source.cpp
。
- 要使用项目文件特定子集中的符号,需输入该子集(例如,
${project_loc}/src/core/*
) - 要使用所有项目源对测试可执行文件进行构建,只需在此字段中输入星号(*)。 这确保了项目中的所有符号定义在测试期间都是可用的。
- 在对一个引用了被测项目的其他源中定义函数的文件进行测试时,如果不选择此选项,可能会出现未解析的符号,从而导致链接器错误。
- 除非被测源没有引用其他文件中的符号,或者为所有此类符号提供了桩函数,否则不要禁用此选项。
- 默认情况下,C++test 按以下方式计算被测文件(要测试的项目文件)和测试套件的列表:
- 使用从以下位置找到的文件中的额外符号:控制 C++test 在执行当前测试时查找安全桩函数、用户定义桩函数和使用的工厂函数定义的位置。您可以指定多个位置(例如,您有用于不同测试级别或主机与目标的不同桩函数),只需在每个附加的位置前输入一个分号即可。
- 忽略对象/库文件:指定要忽略的库和对象(例如,以便于单独测试某个文件)。使用以分号分隔的命令行选项模式的列表。仅忽略链接器命令行中的选项。标准库和编译器库或使用 pragma 指令包含的库不会被过滤。
自动生成的桩函数
- 自动生成的桩函数的输出位置:指定自动生成的桩函数的保存位置。有关自动生成的桩函数的详细信息,请参阅了解和自定义自动桩函数生成。
- 动态桩函数配置:指定动态桩函数配置的模式:
- 启用桩函数回调: 启用后,桩函数回调机制将用于动态桩函数配置;请参阅使用桩函数回调。默认情况下启用此选项。
插入对原函数的调用 - 启用后,生成的桩函数将调用原始函数;请参阅创建调用原始函数的桩函数。此选项默认禁用。
- 启用桩函数 API(已弃用)- 启用用于动态桩函数配置的桩函数 API;请参阅使用桩函数 API(已弃用)。该选项默认禁用。
执行早期检查,明确是否有潜在的链接器问题
此选项控制如果在符号/桩函数分析期间检测到任何丢失的符号,C++test 是否中止单元测试执行。如果报告了未解析的符号,请参阅解决未解析符号的链接器错误获取解决相关问题的提示。
运行时选项卡
- 测试可执行程序运行目录:指定创建和执行测试可执行文件的目录。如果在测试用例源或原始代码中使用了相对路径,C++test 将在该目录中搜索引用的文件。
- 在调试器中运行测试:控制 C++test 是否使用调试器运行测试。有关如何使用调试器运行测试的说明,请参阅在测试执行期间使用调试器。
•使用配置直接在 Eclipse IDE 中调试:控制 C++test 是否直接在 Eclipse IDE 中使用调试器运行测试(根据您配置的 Eclipse 调试配置)。如果启用此选项,还必须指定要使用的 Eclipse 调试配置。
- 单个测试用例超时 (以毫秒为单位):指定 C++test 等待测试用例执行的最大毫秒数。
报告单元测试执行的详细情况:控制是否应从执行的测试用例报告单元测试执行的详细信息。其中包括从 CPPTEST_REPORT 宏报告的值。
- 包括任务细节:控制测试用例执行详细信息中是否应该包括报告的任务(例如,异常、失败的断言、结果)。
- 包括通过的断言细节:控制是否应在测试用例执行详细信息中包含已检查和已通过的断言。- 报告未验证的测试用例结果:控制是否报告测试执行期间获取的后置条件。如果禁用此选项,则无法使用自动验证测试用例结果选项。
- 自动验证测试用例结果:控制是否自动“验证”在测试执行期间获取的后置条件(例如,转换为断言)。有关验证测试用例的原因和方式,请参阅验证测试用例以进行回归测试。
- 生成详细的测试执行报告:启用后可生成测试执行细节报告(详细信息请参阅了解报告)
- 生成详细的覆盖率报告:启用后可收集选定覆盖率类型(有关覆盖率类型的信息,请参阅查看覆盖率信息)的覆盖率详细信息。