在测试过程中,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++ 模板收集代码覆盖率信息。请参见 支持模板函数。
选择 优化覆盖率(仅应用程序监测) 选项以启用特殊的优化覆盖率模式,如下表所述:
选项 目的 覆盖率检测>优化尺寸 优化了覆盖率检测用于存储度量指标数据的内存缓冲区,以占用尽可能少的 RAM。此模式适用于内存量有限的嵌入式设备。 覆盖率检测>优化速度 优化了代码覆盖率检测用于存储度量标准数据的内存缓冲区,以确保实现最低的执行时间。这种模式适合于测量对附加执行时间的低容忍的应用程序覆盖率。 启用数据一致性检查 此选项启用用于检测覆盖率缓冲区损坏的其他算法。如果被测应用程序中的错误行为可能导致覆盖率缓冲区损坏,请启用此选项。启用此选项会带来一些额外的执行时间开销。 启用覆盖率内存缓冲区的初始化 此选项强制执行代码覆盖率检测使用的内存缓冲区的初始化。如果您的编译器在程序开始运行之前未将全局变量和静态变量初始化为 0(ISO C 标准要求),则应选择此选项。如果同时启用了“优化尺寸”覆盖率检测模式和“启用数据一致性检查”,则此选项自动启用(并且不能取消启用)。
启用枚举数据自动生成: 确定是否收集与枚举相关的 API 宏所需的枚举数据(有关详细信息,请参见处理枚举值)。
- 执行细节>测试执行流程:确定 C++test 是使用默认流程进行基于主机的单元测试,还是使用默认流程来构建测试可执行文件(例如,用于不执行的试用版本),生成缺少功能和变量定义的桩函数,还是使用自定义流程(例如,对于 嵌入式或其他跨平台测试)。有关定义自定义流程的详细信息,请参见自定义测试执行流中的讨论。
执行细节>快速执行模式:配置 C++test 不太严格地验证是否测试可执行副产品是最新的 (例如,是否自上次运行之后已经更改 )。
提示:什么时候使用快速执行模式
“快速执行模式 (Quick execution mode)” 可以用于减少准备测试可执行文件所需要的时间。由于 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> 相对位置 (src, 对于 <path>=/ MyProject/module1)
${test_ext} - 测试套件文件特定于 C++test 的扩展名 (.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}
解析为路径项目位置${Project_loc}
解析为特定项目资源的路径。
- 要使用来自于特定项目文件子集的符号,请输入该子集(例如,
${project_loc}/src/core/*
) - 要使用所有项目源来构建测试可执行文件,只需在此字段中输入星号 (*) 。 这确保来自项目的所有符号定义将在测试期间可用。
- 对于引用来自测试项目其它源所定义函数的单个件,如果在测试该文件时未能选择 此选项,则可能产生未解析的符号,从而造成链接器错误。
- 除非正在测试的源不引用来自其它文件的符号,或者为所有此类符号提供桩函数,否则不要禁用此选项。
- 缺省情况下,C++test 以如下方式计算测试文件(要测试的项目文件)和测试套件的列表:
- 使用下列找到的文件中额外的符号:确定 C++test 在何处寻找安全的桩函数 , 用户定义的桩函数 , 和工厂函数定义,以在执行当前测试时使用。您可以指定多个位置(例如,如果您有不同的测试,针对不同的测试级别,或针对主机与目标);只需在每个附加位置前面输入一个分号。
- 忽略对象/库文件:设置需要忽略的库或对象(如促进独立测试某个文件)。使用分号隔开的命令行选项模块列表来实现。只有来自链接器命令行的选项会被忽略掉。标准以及编译器库或包含库编译指令则不会被过滤掉。
自动生成的桩函数
- 自动生成的桩函数的输出位置:指定自动生成的桩函数保存在哪里。要了解自动生成的桩函数的详细信息,请参见 了解并自定义自动化的桩函数生成 。
- 动态桩函数配置: 指定动态桩函数配置的模式:
- 启用桩函数回调: 如果启用,则将使用桩函数回调机制进行动态桩函数配置。 请参见使用桩函数回调。 默认情况下启用此选项。
插入对原始函数的调用 如果启用,则生成的桩函数将调用原始函数;请参见创建调用原始函数的桩函数。默认情况下,此选项处于禁用状态。
- 启用桩函数 API(不建议使用) - 启用桩函数 API 进行动态桩函数配置;请参见 使用桩函数 API(不建议使用)。默认情况下禁用此选项。
尽早检查潜在的链接器问题
如果在符号/桩函数分析期间检测到任何丢失的符号,此选项确定 C++test 是否中止单元测试执行。如果报告了未解析的符号,请参见解决来自未解析符号的链接器错误以获取有关如何解析它们的提示。
运行时选项卡
- 测试可以执行程序运行目录:确定应在其中执行测试可执行文件的目录。如果在测试用例源或在原始代码中使用相对路径, C++test 将搜索此目录中引用的文件。
- 在调试器中运行测试确定 C++test 是否用调试器运行测试。参见 在测试执行期间使用调试器有关如何使用调试器运行测试的说明。
- 单个的测试用例超时 ( 以毫秒为单位 ):确定 C++test 等待测试用例执行的最大毫秒数。
报告单元测试的详细情况:确定是否应该报告从已测试单元测试提供的单元测试执行详细信息。这包括从 CPPTEST_REPORT 宏中报告的值。
- 包括任务细节: 确定是否应该在测试用例执行详细信息中包括报告的任 务 ( 例如,异常、失败的断言、结果 )。
- 包括通过的断言详细信息:确定是否检查的和通过的断言应该被包含在测试用例执行详细信息中。- 报告未验证的测试用例结果:确定是否报告在测试执行期间获得的后置条件。如果禁用此选项,则 自动地验证测试用例结果 选项不可用。
- 自动地验证测试用例结果: 确定是否自动 “验证”在测试执行期间获得的后置条件(例如,转换成断言)。请参见 验证测试用例以进行回归测试有关为什么以及如何验证测试用例的详细信息。
- 生成详细的测试执行报告: 启用生成【测试执行详细信息】报告(有关详细信息,请参见了解报告)
- 生成[覆盖率指标]的详细覆盖率报告: 启用收集选定的覆盖类型的覆盖细节(参见 查看覆盖率信息 关于覆盖类型的信息)。