此章节:
生成测试套件
测试套件是测试用例的容器,必须在添加测试用例之前创建它:
- 选择Parasoft> 显示视图> 测试用例浏览器 以打开【测试用例浏览器】视图
- 在【测试用例浏览器】树中选择一个项目
- 选择 Parasoft> Test Using> Builtin> Unit Testing> Generate Test Suites 以为该项目生成空的测试套件
您还可以通过在【Test Case Explorer】中右键单击一个项目或文件夹并选择 Add New> Test Suite来手动添加一个空的测试套件。
测试套件数据存储
所有测试套件数据(包括测试用例)都存储在【 C++test Project 】目录下的测试套件文件中。该文件和其他 C++test 生成的测试工件应在软件配置管理系统中进行管理。
编辑测试套件
- 在【测试用例浏览器】树中双击一个测试套件,打开【测试套件编辑器】。
- 单击 Globals 编辑器的字段,以配置测试套件的全局变量(有关更多详细信息,请参见 测试用例步骤参考)。之后将在测试用例中使用这些变量。
在 其他测试套件代码 编辑器中,配置可以添加到测试套件代码中的预定义可插入代码部分。
默认情况下,可以配置以下代码节:
- Additional Includes - 额外包括文件
- TestSuiteSetUp - 测试套件 setUp() 函数的定义 (body)
- TestSuiteTearDown - 测试套件 tearDown() 函数的定义(body)
- TestCaseSetUp - 测试套件 setUp() 函数的定义(body)
- TestCaseTearDown - 测试套件 tearDown() 函数的定义 (body)您可以通过以下【开始/结束】标记添加其他代码节到您的测试套件:
/* CPPTEST_TEST_SUITE_CODE_BEGIN CodeSectionIdentifier */
/* CPPTEST_TEST_SUITE_CODE_END CodeSectionIdentifier */
例如,如果您将以下标记添加到测试套件:
/* CPPTEST_TEST_SUITE_CODE_BEGIN NewIncludes2 */ //This is a user-configured code section. /* CPPTEST_TEST_SUITE_CODE_END NewIncludes2 */
新的代码节将出现在下拉菜单中:
- 选择 文件>保存以保存更改后的测试套件
更新的测试套件已准备就绪,可以执行。
创建测试用例
- 打开【测试用例浏览器】,然后右键单击测试套件
- 选择 Add New> Test Case using Editor…
- 出现提示时,输入测试用例名称,然后单击OK;一个空的测试用例编辑器将打开
- 从 用于创建测试用例 下拉列表中选择一个函数。
- 单击 (+) 按钮中的一个为所选功能打开默认测试用例:
创建新测试用例 ()- 为所选函数创建新的测试用例
创建新的参数化测试用例 ()- 为所选函数创建一个新的参数化测试用例; 您可以使用从内置在测试用例中的数据源表或从外部数据源获得的值对测试用例进行参数化 (请参见 使用数据源对测试用例进行参数化)。 - 审查和修改输入值(变量) 和预期输出值(断言); 有关默认测试用例的结构的更多信息,请参见 默认测试用例。
- 保存测试用例以将其添加到测试套件中
新的测试用例将出现在【测试用例浏览器】树中,并且可以执行。有关运行测试用例的说明,请参见 执行测试用例。
默认测试用例
默认测试用例代表给定功能的标准测试用例。它包含以下步骤,这些步骤将在您运行测试用例时按以下描述的顺序执行:
- 变量: 将设置所有必需的输入值(前提条件)。输入值包括全局变量、局部变量(测试函数的参数)和测试对象(当测试成员函数时)。默认情况下,给定类型(0,null,默认构造函数等)的标准值将用作测试用例作者要检查/修改的输入值。
- 调用: 将使用【变量】步骤中设置的前提条件值来调用已测试的函数。
- 断言;实际输出值将与预期值(后置条件)进行比较。输出值包括函数返回值,全局变量和成员变量(在测试成员函数时)。默认情况下,给定类型(0,null等)的标准值将用作测试用例作者要检查/修改的输入值。
您还可以自定义测试用例的结构。请参见Working with Steps。
使用测试用例编辑器编辑测试用例
仅使用【测试用例编辑器】创建的测试用例 (请参见 创建测试用例)才能用编辑器进行编辑。自动生成的测试用例 (请参见 生成测试用例),在【代码编辑器】中创建的测试用例或使用【测试用例向导】创建的测试用例(请参见 使用图形化测试用例向导来添加测试套件以及测试用例)不能用【测试用例编辑器】进行编辑。
- 打开【测试用例浏览器】视图,然后双击一个测试用例
- 修改测试用例的结构或特定参数(请参见 Working with Steps)
- 选择 文件> 保存 将更改保存到测试用例
步骤操作
在测试用例编辑器中,每个测试用例都由一系列步骤表示。在运行时,按照编辑器中定义的从上到下的顺序执行这些步骤。编辑器中提供了实现特定功能的各种步骤:
- 断言:验证后置条件值
- 调用:调用测试功能
- 代码:插入自定义代码段
- 报文:指定在测试执行期间要打印的报文
- 参数:启用测试用例参数化
- 报告:报告测试用例值
- 存根配置: 配置存根
- 存根期望:配置顺序或期望的调用顺序
- 存根(不建议使用):配置存根
- 变量:设置输入值
有关可用步骤的更多详细信息,请参见 测试用例步骤参考。
默认测试用例仅使用可用步骤的一部分(请参见 默认测试用例)。如果需要,您可以通过按需要的顺序配置各种步骤来定义测试用例流,从而自定义测试用例以实现特定方案。例如,可以在执行一系列函数调用之前执行其他存根配置。此外,可以报告指定的输入/输出值。
添加一个新步骤
- 在【测试用例编辑器】中,从 新增下拉菜单中选择一个步骤
- 点击(+)按钮; 新步骤将添加到测试用例中
- 根据需要单击并拖动步骤对其重新排序
删除一个现有步骤
在【测试用例编辑器】中,单击步骤旁边的 (-) 按钮。该步骤将从测试用例中删除。
重新排序步骤
在【测试用例编辑器】中,单击步骤向导(四向箭头)以将步骤拖放到顺序中。
复制步骤
在【测试用例编辑器】中,单击步骤向导(四向箭头)以在按住 CTRL 键的同时拖放步骤。
从另一个测试用例复制步骤
- 打开两个【测试用例编辑器】窗口,并将它们并排放置。
- 单击步骤向导(四向箭头),然后将步骤从一个编辑器拖到另一个编辑器。
配置存根行为
您可能需要配置存根行为以实现某些测试方案并确保一致的运行时间环境。使用动态存根配置功能,您可以将存根配置直接放入测试用例定义中,因此每个测试用例可能都有自己独特的存根配置。您可以使用存根回调框架 (有关详细信息请参见 使用桩函数回调 ) 或使用测试用例编辑器的界面来手动修改测试用例的源代码。测试用例编辑器为存根配置提供了专用步骤–存根配置和存根期望–用于设置所需的存根返回值,在存根和原始之间进行切换等。
在【测试用例编辑器】中定义的步骤按从上到下的顺序执行。因此,至关重要的是要确保按所需顺序配置步骤:
- 在存根配置步骤中指定的配置仅影响在以下测试用例步骤中配置了其执行的存根调用。由【存根配置】步骤之前的步骤产生的存根调用不会执行已配置的操作。
- 如果为同一存根添加了多个【存根配置】步骤,则存根调用将使用紧接存根之前的【存根配置】步骤中指定的配置。
- 【存根期望】步骤应该在定义了期望的所有测试用例步骤之前。这样可以确保对所有调用计数。
- 如果在测试用例中添加了多个【存根期望】步骤,将应用每个步骤中配置的期望。
有关存根行为配置的其他详细信息
- 必须使用 C++test 10.3 或更高版本自动生成或手动创建存根函数,以配置存根行为。
- 可用的存根功能显示在【存根】视图中 (Parasoft> 显示视图>存根)。
- 在测试用例中未配置的存根函数(具有【存根配置】和【存根期望】步骤)将根据存根定义进行操作(自动生成的存根将返回默认值:0, false, null)。
- 存根配置步骤必须放在存根配置将使用的【调用】步骤之前。
配置存根配置步骤
存根配置步骤允许您使用存根回调框架配置存根行为。
存根回调要求在创建存根之前,在【存根】视图中启用启用存根回调 选项(请参见【存根】视图中的【配置存根】选项) 或在测试配置中直接启用它 (参见 执行选项卡设置-定义测试的执行方式) 。
- 用存根函数名称填写 函数 字段或按Ctrl + Space 显示可用存根的列表,然后选择要配置的存根。C++test 将在【函数】字段旁边自动显示存根函数界面。
- 启用用于定义存根行为的编辑模式:
表 – (默认)打开指定参数的配置表
代码 – 打开代码编辑器以脚本化存根行为
如果在两种编辑模式中都定义了存根行为,则在测试用例执行期间将使用当前选择的模式。
在表中配置存根行为
此表模式允许您定义将在测试用例执行期间执行的动作。这些操作在单独的表行中进行配置,并按自上而下的顺序执行。
通过从下拉菜单中选择操作类型来完成 操作 列。
然后使用所需参数填写P1-P4列。您可以遵循选择操作类型时自动显示的建议。
操作类型
可以使用以下操作类型:
- 设置一个值。选择 设置值 类型,然后在 P1 中指定变量名称,在 P2 中指定值。您可以为存根参数、返回值
(*__return)
、全局变量和存根函数所属的类的成员定义此操作。 - 函数调用。选择 函数调用 类型,然后在 P1 中指定变量名称,在 P2 中指定函数名称,并在 P3 中指定函数参数。
- 断言。指定所选断言类型所需的断言参数(将显示每种断言类型的建议)。可以从下拉菜单中选择的断言类型与在【断言】步骤中可配置的断言相同(有关可用断言的列表,请参见《 C++test 用户指南》)。您可以定义此操作以检查存根参数、父对象
(__this)
、全局变量以及存根函数所属的类的成员的值。
指定调用参数
通过定义指定调用的参数,可以为相同存根的单个调用指定存根行为。指定调用参数必须由大括号中的逗号分隔参数列表提供:
- 参数在序列中的位置与执行期间的存根调用数字相对应。在上面的示例中,值 2、37 和 14 将分别在第一个、第二个和第三个存根调用中使用。
- 如果用指定调用的参数配置一个操作,除非最后一个参数是省略号(参见下面),则它将只对相对应数字的存根执行调用。在上面的示例中,即使对存根的调用总数较高,该操作也只会针对第一个、第二个和第三个存根执行调用。
通过添加省略号(…)作为序列中的最后一个参数,可以配置要对任意数量的存根调用执行的操作。结果,序列中显式指定的最后一个值将用于下一步的所有存根调用。
在下面的示例中,值 2 和 37 将分别在第一个和第二个存根调用中使用,而值 14 将用于第三个调用,以及对存根的以下任何调用:
如果一个存根操作使用多个指定调用的参数集进行参数化,那么这两个参数集必须具有相同数量的值。在下面的例子中,两个指定调用的集合都包含两个值:
参数值可以是在给定上下文中合适的任何值,例如:
- {3, 5, 7} – 3 个整数参数的序列
- {56.3, 5.22, 7.99, 0.77} – 4 个浮点参数的序列
- {foo(1), goo(2), boo(3,45)} – 3 个函数调用参数的序列
在代码中配置存根行为
通过代码模式,您可以提供用于配置存根行为的代码片段。
您可以使用 C++test API 的所有功能(包括断言)在代码中配置存根行为。
使用存根 stubCallInfo->callNo
并提供指定调用的值,可以为单个调用指定存根行为。以下示例显示了以以下方式配置的存根:
- 第一个存根调用验证 a 和 b 参数是否等于 0,并且存根返回值 123
- 所有其他存根调用都会验证 a 和 b 参数是否等于 1,并且存根返回值 10
配置存根期望步骤
存根期望步骤允许您为存根函数调用配置以下期望:
- 期望函数调用的确切数量
- 期望调用的次数大于指定的值
- 期望调用的次数小于指定的值
- 期望调用的次数在指定的范围
- 期望存根调用的顺序
配置存根期望步骤:
- 通过从下拉菜单中选择操作类型来完成 操作 列。
- 在函数列中填写函数名称。
- 使用参数填写 参数 列。您可以遵循选择操作类型时自动显示的建议。
期望调用序列操作
期望调用序列操作可帮助您确保指定的存根函数按所需顺序排列。
- 它仅监视函数列中提供的存根,而忽略任何其他函数。例如,以下示例中的期望调用序列将匹配运行时序列[foo1,foo4,foo5,foo2,foo7,foo3],因为将忽略 foo4、foo5 和 foo7 函数。
- 可以多次遇到指定的序列。例如,运行时序列[foo1,foo2,foo2,foo1,foo2,foo3],不会报告任何错误。
- 如果指定序列中至少有一个不完整,则将报告错误。例如,以下序列将报告错误,因为该序列的第二次出现未完成:[foo1, foo2, foo2, foo1, foo2]。
支持的存根行为配置操作
修改存根参数值、返回值、全局变量、父类成员
- 为给定功能添加 存根配置 步骤 (或选择现有功能)。
- 从 操作 列的下拉列表中选择设置值。
- 在P1 列中填写将为其分配值的变量名称。使用 *__return 修改返回值。
- 在 P2 列中指定值。
检查存根参数、父对象(__this)
、全局变量、父类成员的值
- 为给定函数添加 存根配置步骤 (或选择现有功能)。
- 从【操作】列的下拉列表中选择 CPPTEST_ASSERT。
- 在P1列中指定期望值。
- 在 P2 列中指定实际值(变量名)。
- 如果需要,在 P3 或 P4 列中指定其他值。
调用原始函数(适用于具有原始定义的函数)
- 为给定函数添加 存根配置步骤 (或选择现有功能)。
- 从 操作 列的下拉列表中选择 调用功能。
- 使用 *__return 变量(将为其分配值)填写P1列
- 用函数名称填写 P2 列。
- 用原始函数参数填写 P3 列。
配置预期的调用次数
- 添加 存根期望步骤。
- 从 操作 下拉列表中选择 预期的调用次数
- 在 函数 列中指定函数名称 - 确保存根函数存在
- 在 参数 列中指定预期的调用次数
配置预期的调用顺序
- 添加 存根期望步骤。
- 从 操作 下拉列表中选择 预期的调用顺序
- 在 函数 列中指定函数名称的顺序(逗号分隔) - 确保存根函数存在
在存根调用中定义自定义操作
- 为给定函数添加 存根配置步骤 (或选择现有步骤)。
- 启用 代码编辑模式。
- 在 代码 编辑器中,提供修改存根行为的代码。
添加测试用例参数化
通过参数化,您可以使用一组不同的前提条件和前提条件值执行相同的测试。您可以在内置表或外部数据源(例如 CSV 文件)中定义任意变量集。每个变量都有其自己的列,并具有唯一的用户分配名称。 参数化的测试用例将针对每一行值独立执行。
您可以通过以下方式之一添加测试用例的参数化:
- 通过使用 创建新的参数化测试用例 选项创建新的测试用例 (请参见 使用数据源对测试用例进行参数化); 这会将【参数】步骤添加到测试用例,并使用默认值自动更新测试用例,
- 通过向现有测试用例中手动添加【参数】步骤。
您在【参数】步骤中定义的变量可以在其他步骤中使用,例如,用作前置条件变量的初始化程序(【变量】步骤),用作预期的后置条件值(【断言】步骤),作为存根配置参数(【存根】步骤)。其他步骤可以通过使用 Parameters API 访问变量。可以使用以下数据源宏:
CPPTEST_DS_GET_BOOL("<column name with bool values>")
CPPTEST_DS_GET_CSTR("<column name with string values>")
CPPTEST_DS_GET_FLOAT("<column name with float values>")
CPPTEST_DS_GET_INTEGER("<column name with integer values>")
CPPTEST_DS_GET_CHAR ("<column name with char values>")
CPPTEST_DS_GET_UINTEGER("<column name with unsigned integer values>")
CPPTEST_DS_GET_MEM_BUFFER ("<column name with buffer data>", "<size of data>")
CPPTEST_DS_GET_ENUM ("<enum type name>", "<column name with enum values>")
在目标中按 CTRL+SPACE 来访问 Parameters API 步骤。
参数步骤仅支持简单类型值。
示例
以下示例显示了 processValue(int)
的参数化测试用例。内置表中指定的值使用数据源宏和列名应用于【变量】、【存根配置】和【断言】步骤中。
配置参数步骤
以下选项可用于配置【参数】步骤:
- 内置(表格) 单选按钮 - 向您的测试用例中添加一个用于指定参数化值的表格
- 数据源单选按钮 - 定义用于指定参数值的外部数据源
- 创建新数据源 图标- 创建新的外部数据源
- 编辑数据源 图标 - 打开数据源
- 打开数据源文件 图标 - 打开现有数据源文件
- 更新列名称 图标 - 显示列名称
- 参数化测试用例... 图标 - 打开对话框,可让您执行以下操作:
- 为数据源自定义列命名模式
- 使用与模式匹配的列中的值自动更新测试用例 (请参见 参数化测试用例)
参数化测试用例
使用添加的数据源中指定的值对测试用例进行参数化:
- 单击 参数化测试用例... 图标以打开【测试用例编辑器】。
- 指定列命名模式。该模式必须包括以下内容:
- {CONTEXT} - 将使用从列中获取的值的上下文。可以使用以下上下文:
V 表示【变量】步骤
A 表示【断言】步骤
SV 表示【存根配置】步骤中的【设置值】操作类型
SA 表示【存根配置】步骤中的断言
- {TYPE} - 将用于获取值的数据源宏。可以使用以下数据类型:
I 表示CPPTEST_DS_GET_INTEGER
F 表示CPPTEST_DS_GET_FLOAT
S 表示CPPTEST_DS_GET_CSTR
C 表示CPPTEST_DS_GET_CHAR
B 表示CPPTEST_DS_GET_BOOL
U 表示CPPTEST_DS_GET_UINTEGER
M(<size>) 表示CPPTEST_DS_GET_MEM_BUFFER
E(<type>) 表示CPPTEST_DS_GET_ENUM
- {VARIABLE} - 变量名
默认为{CONTEXT}#{TYPE}#{VARIABLE
} (请参见 Example)。
- 点击 OK。测试用例将使用与模式匹配的数据源列中指定的值进行更新。
报告值和报文
使用【报告】步骤报告测试用例中的值。此步骤提供了一组报告函数,这些函数将打印给定类型的值 (例如 CPPTEST_REPORT_INTEGER(),CPPTEST_REPORT_FLOAT(),
等)。这些函数在【类型】下拉列表中可找到。选择报告函数后,所需的参数将显示在 P1-P3 列中。
另外,您可以在运行期间使用【报文】步骤来打印一条简单的文本报文。此步骤可用于输出可跟踪性标识符或用于调试目的。
【报告】和【报文】步骤的输出将被打印到控制台,也可以包含在单元测试报告中。
插入自定义代码段
您可以使用【代码】步骤向测试用例添加复杂的逻辑,该步骤实现了自定义的 C 或 C++ 代码段。该代码段可以放在测试用例定义中的任何位置,但是由于自上而下的执行顺序,步骤的位置很重要。该代码段可以使用前面的【变量】步骤定义的变量。本代码引入的变量可以在后续步骤中重复使用。
测试用例编辑器将无法验证在【代码】步骤中输入的自定义代码的正确性。在测试用例执行期间将报告语法错误。
测试用例步骤参考
测试用例编辑器提供以下步骤,这些步骤可以在定义测试用例时用作基本构建块。
断言
断言将实际值与期望值进行比较。它们通常用于检查输出值(后置条件)。
类型
可以从下拉列表中选择可用的断言类型。有关受支持的断言类型的完整列表,请参见 测试用例验证宏。
P1、 P2、 P3、 P4 (附加参数)
可用参数取决于断言类型。按 CTRL+SPACE,为一个已知变量列表选择一个参数字段。
对应的 C / C++ 代码
<Type>([<P1>, <P2>, <P3>, <P4>]);
调用
调用步骤允许您调用经过测试的函数。可以在单个测试用例中使用多个【调用】步骤来定义一系列调用。测试用例编辑器将无法验证输入的调用参数的正确性。
返回
返回字段是用于存储返回值的变量。如果不需要返回值,请留空白。按 CTRL+SPACE 以获取已知类型的列表。
名称
【名称】字段是函数名称。对于成员函数,【名称】字段还应包含一个对象变量(object.mFunction or object->mFunction
).按 CTRL+SPACE 可获得已知变量的列表。
参数
您可以在此字段中输入逗号分隔的参数列表。可接受任何有效的 C / C ++ 参数(常量、变量、表达式等)。按 CTRL+SPACE 可获得已知变量的列表。
对应的 C / C++
<Return> =] <Name>(<Parameters>);
代码
使用代码字段,您可以输入自定义的 C / C++ 代码段,以在运行测试用例时执行。该代码可以使用前面步骤中已经定义的符号。后续步骤可以使用【代码】步骤引入的符号。测试用例编辑器将不会验证输入代码的语法。
对应的 C/C++ 代码
<Code>
全局
全局变量是指定测试套件的变量定义、初始化和分配。全局变量可以在以后的测试用例中使用。全局变量仅在测试套件编辑器中可用。
类型
在类型字段中输入全局变量的类型(必填)。按 CTRL+SPACE 以获取已知类型的列表。
名称
在名称字段中输入全局变量的名称(必填)。如果定义了多个具有相同名称的变量,将报告警告。
值
在【值】字段中输入要分配给变量的初始化值。可接受任何有效的 C / C++ 初始化程序(常量、表达式等)。按 CTRL+SPACE 可获得已知变量的列表。
对应的 C / C++ 代码
<Type> <Name> [= <Value>];
报文
在【报文】步骤中输入一条简单的文本报文,它将在测试执行期间使用 CPPTEST_REPORT() 打印出来。【报文】步骤用于可追溯性或调试目的很有用。文本将原样打印(不允许使用任何变量或表达式),所有引号均会转义。
对应的 C / C++ 代码
CPPTEST_REPORT(“<Message>”);
参数
使用【参数】步骤来设置测试参数。测试用例将针对该步骤中的每一行独立执行。在单个测试用例中,仅允许执行一个【参数】步骤。可以使用参数 API 访问【参数】步骤中的值。【参数】步骤有两种模式:内置(表)模式和数据源模式。
内置(表)模式
启用 内置(表) 选项以直接在【参数】编辑器中输入值:
在这种模式下,每一列(A、B、C等)代表一个变量,每一行代表将在测试用例执行期间使用的数据向量。
数据源模式
启用【数据源】选项,然后输入现有数据源的名称。在按住空格键的同时按住 Control 键将显示可用数据源的名称:
输入数据源名称后,可以执行以下操作:
- 更新列名: 加载指定数据源的列名。加载的列名将在【参数】步骤中列出。
- 创建新的数据源: 如果输入的名称与现有数据源不匹配,则将使用该名称创建一个新的数据源
- 编辑数据源: 打开指定数据源的数据源编辑器
- 打开数据源文件: 打开指定 CSV 或 Excel 数据源的数据源文件
此模式使用已经定义的现有数据源,包括行和列的名称。您可以单击 更新列名 按钮显示现有数据源的列名。单击更新列名称 按钮时,只能显示列名称。 现有数据源中的行不会在此模式下显示。
对应的 C / C++ 代码
N/A
报告
您可以在【报告】步骤中设置报文,这些报文将在测试执行期间显示运行时值。此步骤可用于打印输入/输出值或用于调试目的。
类型
从【类型】下拉列表的可用类型中选择一种报告类型。有关受支持的断言类型的完整列表,请参见测试用例验证宏。
P1、 P2、 P3 (附加参数)
可用参数取决于报告类型。按 CTRL+SPACE 可获得已知变量的列表。
对应的 C / C++ 代码
<Type>([<P1>, <P2>, <P3>]);
存根配置
存根配置 步骤允许您配置当前测试用例的存根行为。该步骤应放置在要进行配置的 Call 步骤之前。另请参见 配置存根行为。
操作
操作字段指定配置存根行为的操作类型。可用操作将显示在下拉列表中。支持以下操作:
- 设定值:修改值; 可以为存根参数、返回值、全局变量以及存根函数所属的类的成员定义此操作。
- 调用函数:指定要调用的函数。
- CPPTEST_ASSERT: (断言):对照期望值验证实际输出值; 可以从下拉菜单中选择特定的断言类型(可用断言与在断言步骤中可配置的断言相同,有关可用断言的列表,请参见 测试用例验证宏 )。
P1、 P2、 P3 (附加参数)
P1、 P2、 P3 和 P4 字段允许您为所选操作类型指定参数。参数取决于操作类型。您可以遵循选择操作类型时自动显示的建议。按 CTRL+SPACE 可获得已知变量的列表。
表/代码模式
使用 表 和 模式 单选按钮可以启用所需的编辑模式来定义存根行为:
- 表 – (默认)打开指定参数的配置表
- 代码 – 打开代码编辑器以脚本化存根行为
存根期望
存根期望 步骤允许您配置存根调用的预期数量和顺序。该步骤应放置在其配置的 Call 步骤之前。另请参见 Configuring Stub Behavior。
操作
【操作】字段指定期望类型。可用类型将显示在下拉列表中。支持以下操作:
- 期望调用的次数: 配置期望调用的次数
- 超过期望调用的次数: 配置期望调用的次数
- 小于期望调用的次数: 配置期望调用的次数
- 范围中的期望调用的次数: 配置期望调用的次数
- 预期调用序列:配置预期调用序列
函数
在函数字段中为应该应用配置的桩函数指定功能标识符。输入以逗号分隔的函数标识符调用序列,以进行【预期调用序列】操作。
函数标识符是用于标识存根的字符串。默认情况下, C++test 生成的存根按照以下模式使用标识符:[parent::]<function_name>
。仅当函数/方法是类或名称空间成员时,才添加parent::
前缀。仅添加直接父级。对于模板类方法、父名称中省略了模板参数。
C++test 对函数的所有重载版本使用相同的函数标识符。如有必要,您可以通过修改存根定义为每个重载的存根函数引入唯一的函数标识符。这将使您能够区分重载的函数/方法的存根。
参数
使用【参数】字段可以为所选操作类型指定参数。参数取决于操作类型。您可以遵循选择操作类型时自动显示的建议。
存根(不推荐使用)
【存根】步骤为当前测试用例设置配置。该步骤应放置在要进行配置的调用步骤之前。另请参见 配置桩函数行为。
操作
【操作】字段指定存根行为或期望。可用操作将显示在下拉列表中。支持以下操作:
- 设置返回值: 修改返回值(仅适用于简单类型)
- 设置参数:修改存根参数
- 原始调用:调用原始函数
- 使用自定义操作:对存根调用执行自定义操作
- 期望调用的次数: 配置期望调用的次数
- 超过期望调用的次数: 配置期望调用的次数
- 小于期望调用的次数: 配置期望调用的次数
- 范围中的期望调用的次数: 配置期望调用的次数
- 预期调用序列:配置预期调用序列
函数
在函数字段中为应该应用配置的桩函数指定功能标识符。输入以逗号分隔的函数标识符调用序列,以进行【预期调用序列】操作。
函数标识符是用于标识存根的字符串。默认情况下, C++test 生成的存根按照以下模式使用标识符:[parent::]<function_name>
。仅当函数/方法是类或名称空间成员时,才添加parent::
前缀。仅添加直接父级。对于模板类方法、父名称中省略了模板参数。
C++test 对函数的所有重载版本使用相同的函数标识符。如有必要,您可以通过修改存根定义为每个重载的存根函数引入唯一的函数标识符。这将使您能够区分重载的函数/方法的存根。
参数
可用参数取决于操作类型。按 CTRL+SPACE 可获得已知变量、参数 API 和存根 API 的列表。
条件
您可以在【条件】字段中指定可选条件。可用条件取决于操作类型。按 CTRL+SPACE 可获得已知变量、参数 API 和存根 API 的列表。
对应的 C / C++ 代码
/* SET RETURN VALUE */ CPPTEST_ON_CALL("<Function>")[-><Condition>]->Arg("__return")->Assign()-><Parameters>; /* SET PARAMETERS */ CPPTEST_ON_CALL("<Function>")[-><Condition>]->Arg("<param1>")->Assign()-><value representation>->Arg("<param2">)->Assign()-><value representation>... /* CALL ORIGINAL */ CPPTEST_ON_CALL("<Function>")[-><Condition>]->Arg("__callOrig")->Assign()->Int(1); /* USE CUSTOM ACTION */ CPPTEST_ON_CALL("<Function>")[-><Condition>]-><Parameters>; /* EXPECT NUMBER OF CALLS */ CPPTEST_EXPECT_NCALLS("<Function>", <Parameters>); /* EXPECT NUMBER OF CALLS MORE THAN */ CPPTEST_EXPECT_NCALLS_MORE_THAN("<Function>", <Parameters>); /* EXPECT NUMBER OF CALLS LESS THAN */ CPPTEST_EXPECT_NCALLS_LESS_THAN("<Function>", <Parameters>); /* EXPECT NUMBER OF CALLS IN RANGE */ CPPTEST_EXPECT_NCALLS_IN_RANGE("<Function>", <Parameters>); /* EXPECT CALL SEQUENCE */ CPPTEST_EXPECT_CALL_SEQUENCE()->Add("<Function>")->Add("<Function>")... ;
变量
使用【变量】步骤来指定变量定义、初始化和赋值。本地变量和全局变量都可以添加到此步骤。变量通常用于设置输入值(前提条件)。
类型
【类型】字段指定变量的类型。将字段留空以设置全局变量。按 CTRL+SPACE 以获取已知类型的列表。
名称
在【名称】字段中输入变量的名称。名称是必需的。对于成员变量、名称还应包含对象变量 (object.mVariable or object->mVariable
)。如果定义了多个具有相同名称的变量,将报告警告。按 CTRL+SPACE 可获得已知变量的列表。
值
按 CTRL+SPACE 可获得已知变量的列表。
对应的 C / C++ 代码
[<Type>] <Name> [= <Value>];
不建议使用的存根步骤配置操作
修改返回简单类型值的函数的返回值
- 从【操作】下拉列表中选择设置返回值
- 在【功能】列中指定一个功能名称 - 确保存根功能存在
- 在参数列中指定返回值
- (可选)指定何时返回值的条件(条件列)
如果指定了多个设置返回值操作,则会按从上到下顺序进行处理。符合条件的最后一个操作将生效。
如果还为给定的函数和条件指定了调用原始操作,它将覆盖设置返回值操作并调用原始函数。
若要修改复杂类型的返回值, 请使用【基本操作】使用复杂类型的基本方法中所述的方法。
修改存根参数以获取简单类型值
- 从【操作】下拉列表中选择设置参数
- 在【功能】列中指定一个功能名称 - 确保存根功能存在
使用
<stub parameter name>=<value>
语法在【参数】列中指定存根参数。也支持以分号分隔的列表。示例:paramA=100; paramB=localVar; paramC=ByRef(globalVar) arrayParamD[3]=10
- (可选)指定何时修改参数的条件(条件列)
如果为同一参数指定了多个【设置参数】操作,则会按从上到下顺序进行处理。符合条件的最后一个操作将生效。
如果还为给定的函数和条件指定了调用原始操作,则将使用修改后的参数来调用原始函数。
若要修改复杂类型参数,请使用【基本操作】和 使用复杂类型的基本方法中所述的方法。
为具有原始定义的函数调用原始函数
- 从【操作】下拉列表中选择调用原始
- 在【函数】列中指定函数名称 - 确保存根函数存在
- (可选)指定何时调用原始函数的条件(条件列)
配置预期的调用次数
- 从【操作】下拉列表中选择【预期的调用次数】
- 在【函数】列中指定函数名称 - 确保存根函数存在
- 在【参数】列中指定预期的调用次数
配置预期的调用顺序
- 从【操作】下拉列表中选择【预期的调用顺序】
- 在【函数】列中指定函数名称的顺序(逗号分隔) - 确保存根函数存在
在存根调用中定义自定义操作
- 从【操作】下拉列表中选择【使用自定义操作】
- 在【函数】列中指定函数名称 - 确保存根函数存在
- 在【参数】列中指定自定义操作 - 该操作由存根 API 定义 -有关更多详细信息,请参见 使用桩函数 API(已弃用)。
(可选)指定执行自定义操作的条件(条件列)
自定义操作将使用 Stubs API 以 C / C++ 代码表示:CPPTEST_ON_CALL("<Function>")->[If()-><Condition>->]<Parameters>
此操作可用于操作复杂类型值-如 使用复杂类型的基本方法中所述。
关于 C 测试用例
在存根步骤中输入值时,C++test 将自动检测常量值的类型以及 Parameters API。对于其他值(变量,表达式),必须使用存根 API 明确指定值的类型,例如 Int(<value>), Float(<value>).
对于 C++ 测试用例,不是必需的。
定义条件的语法
使用下列的语法定义条件 (例如, SET RETURN VALUE、 CALL ORIGINAL、USE CUSTOM ACTION)。
简化语法
<name of stub parameter> <operator> <value>
示例:
paramA == 10 (condition will be met if "paramA" stub parameter equals 10) paramB > 100 (condition will be met if "paramB" stub parameter is greater than 100)
PPTEST_NCALLS <operator> <number of calls>
示例:
CPPTEST_NCALLS == 10 (condition will be met for 10th call to stub function) CPPTEST_NCALLS < 5 (condition will be met during the first 4 calls to stub function)
扩展语法
- 存根 API可用于构建复杂条件; 参见。使用桩函数 API(已弃用).
Example:If().Arg("param1").Greater().Value(10)
简化和扩展语法不能在单一条件下混合使用。