此章节:
测试套件是测试用例的容器,必须在添加测试用例之前创建它:
所有测试套件数据(包括测试用例)都存储在【 C++test Project 】目录下的测试套件文件中。该文件和其他 C++test 生成的测试工件应在软件配置管理系统中进行管理。
在 其他测试套件代码 编辑器中,配置可以添加到测试套件代码中的预定义可插入代码部分。
默认情况下,可以配置以下代码节:
- 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 */ |
新的代码节将出现在下拉菜单中:
更新的测试套件已准备就绪,可以执行。
新的测试用例将出现在【测试用例浏览器】树中,并且可以执行。有关运行测试用例的说明,请参见 执行测试用例。
默认测试用例代表给定功能的标准测试用例。它包含以下步骤,这些步骤将在您运行测试用例时按以下描述的顺序执行:
您还可以自定义测试用例的结构。请参见Working with Steps。
仅使用【测试用例编辑器】创建的测试用例 (请参见 创建测试用例)才能用编辑器进行编辑。自动生成的测试用例 (请参见 生成测试用例),在【代码编辑器】中创建的测试用例或使用【测试用例向导】创建的测试用例(请参见 使用图形化测试用例向导来添加测试套件以及测试用例)不能用【测试用例编辑器】进行编辑。
在测试用例编辑器中,每个测试用例都由一系列步骤表示。在运行时,按照编辑器中定义的从上到下的顺序执行这些步骤。编辑器中提供了实现特定功能的各种步骤:
有关可用步骤的更多详细信息,请参见 测试用例步骤参考。
默认测试用例仅使用可用步骤的一部分(请参见 默认测试用例)。如果需要,您可以通过按需要的顺序配置各种步骤来定义测试用例流,从而自定义测试用例以实现特定方案。例如,可以在执行一系列函数调用之前执行其他存根配置。此外,可以报告指定的输入/输出值。
在【测试用例编辑器】中,单击步骤旁边的 (-) 按钮。该步骤将从测试用例中删除。
在【测试用例编辑器】中,单击步骤向导(四向箭头)以将步骤拖放到顺序中。
在【测试用例编辑器】中,单击步骤向导(四向箭头)以在按住 CTRL 键的同时拖放步骤。
您可能需要配置存根行为以实现某些测试方案并确保一致的运行时间环境。使用动态存根配置功能,您可以将存根配置直接放入测试用例定义中,因此每个测试用例可能都有自己独特的存根配置。您可以使用存根回调框架 (有关详细信息请参见 使用桩函数回调 ) 或使用测试用例编辑器的界面来手动修改测试用例的源代码。测试用例编辑器为存根配置提供了专用步骤–存根配置和存根期望–用于设置所需的存根返回值,在存根和原始之间进行切换等。
在【测试用例编辑器】中定义的步骤按从上到下的顺序执行。因此,至关重要的是要确保按所需顺序配置步骤:
有关配置已弃用的存根步骤的信息,请参见 已弃用的存根步骤配置操作 部分。 |
存根配置步骤允许您使用存根回调框架配置存根行为。
存根回调要求在创建存根之前,在【存根】视图中启用启用存根回调 选项(请参见【存根】视图中的【配置存根】选项) 或在测试配置中直接启用它 (参见 执行选项卡设置-定义测试的执行方式) 。 |
表 – (默认)打开指定参数的配置表
代码 – 打开代码编辑器以脚本化存根行为
此表模式允许您定义将在测试用例执行期间执行的动作。这些操作在单独的表行中进行配置,并按自上而下的顺序执行。
通过从下拉菜单中选择操作类型来完成 操作 列。
然后使用所需参数填写P1-P4列。您可以遵循选择操作类型时自动显示的建议。
可以使用以下操作类型:
(*__return)
、全局变量和存根函数所属的类的成员定义此操作。(__this)
、全局变量以及存根函数所属的类的成员的值。通过定义指定调用的参数,可以为相同存根的单个调用指定存根行为。指定调用参数必须由大括号中的逗号分隔参数列表提供:
通过添加省略号(…)作为序列中的最后一个参数,可以配置要对任意数量的存根调用执行的操作。结果,序列中显式指定的最后一个值将用于下一步的所有存根调用。
在下面的示例中,值 2 和 37 将分别在第一个和第二个存根调用中使用,而值 14 将用于第三个调用,以及对存根的以下任何调用:
如果一个存根操作使用多个指定调用的参数集进行参数化,那么这两个参数集必须具有相同数量的值。在下面的例子中,两个指定调用的集合都包含两个值:
参数值可以是在给定上下文中合适的任何值,例如:
通过代码模式,您可以提供用于配置存根行为的代码片段。
您可以使用 C++test API 的所有功能(包括断言)在代码中配置存根行为。
使用存根 stubCallInfo->callNo
并提供指定调用的值,可以为单个调用指定存根行为。以下示例显示了以以下方式配置的存根:
存根期望步骤允许您为存根函数调用配置以下期望:
配置存根期望步骤:
期望调用序列操作可帮助您确保指定的存根函数按所需顺序排列。
如果指定了多个设置值操作,则会按从上到下顺序进行处理。如果由相同的参数指定它们,则最后一个操作将生效。 |
(__this)
、全局变量、父类成员的值通过参数化,您可以使用一组不同的前提条件和前提条件值执行相同的测试。您可以在内置表或外部数据源(例如 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)
的参数化测试用例。内置表中指定的值使用数据源宏和列名应用于【变量】、【存根配置】和【断言】步骤中。
以下选项可用于配置【参数】步骤:
使用添加的数据源中指定的值对测试用例进行参数化:
CPPTEST_DS_GET_INTEGER
CPPTEST_DS_GET_FLOAT
CPPTEST_DS_GET_CSTR
CPPTEST_DS_GET_CHAR
CPPTEST_DS_GET_BOOL
CPPTEST_DS_GET_UINTEGER
CPPTEST_DS_GET_MEM_BUFFER
CPPTEST_DS_GET_ENUM
{CONTEXT}#{TYPE}#{VARIABLE
} (请参见 Example)。使用【报告】步骤报告测试用例中的值。此步骤提供了一组报告函数,这些函数将打印给定类型的值 (例如 CPPTEST_REPORT_INTEGER(),CPPTEST_REPORT_FLOAT(),
等)。这些函数在【类型】下拉列表中可找到。选择报告函数后,所需的参数将显示在 P1-P3 列中。
另外,您可以在运行期间使用【报文】步骤来打印一条简单的文本报文。此步骤可用于输出可跟踪性标识符或用于调试目的。
【报告】和【报文】步骤的输出将被打印到控制台,也可以包含在单元测试报告中。
您可以使用【代码】步骤向测试用例添加复杂的逻辑,该步骤实现了自定义的 C 或 C++ 代码段。该代码段可以放在测试用例定义中的任何位置,但是由于自上而下的执行顺序,步骤的位置很重要。该代码段可以使用前面的【变量】步骤定义的变量。本代码引入的变量可以在后续步骤中重复使用。
测试用例编辑器将无法验证在【代码】步骤中输入的自定义代码的正确性。在测试用例执行期间将报告语法错误。
测试用例编辑器提供以下步骤,这些步骤可以在定义测试用例时用作基本构建块。
断言将实际值与期望值进行比较。它们通常用于检查输出值(后置条件)。
可以从下拉列表中选择可用的断言类型。有关受支持的断言类型的完整列表,请参见 测试用例验证宏。
可用参数取决于断言类型。按 CTRL+SPACE,为一个已知变量列表选择一个参数字段。
<Type>([<P1>, <P2>, <P3>, <P4>]);
调用步骤允许您调用经过测试的函数。可以在单个测试用例中使用多个【调用】步骤来定义一系列调用。测试用例编辑器将无法验证输入的调用参数的正确性。
返回字段是用于存储返回值的变量。如果不需要返回值,请留空白。按 CTRL+SPACE 以获取已知类型的列表。
【名称】字段是函数名称。对于成员函数,【名称】字段还应包含一个对象变量(object.mFunction or object->mFunction
).按 CTRL+SPACE 可获得已知变量的列表。
您可以在此字段中输入逗号分隔的参数列表。可接受任何有效的 C / C ++ 参数(常量、变量、表达式等)。按 CTRL+SPACE 可获得已知变量的列表。
<Return> =] <Name>(<Parameters>);
使用代码字段,您可以输入自定义的 C / C++ 代码段,以在运行测试用例时执行。该代码可以使用前面步骤中已经定义的符号。后续步骤可以使用【代码】步骤引入的符号。测试用例编辑器将不会验证输入代码的语法。
<Code>
全局变量是指定测试套件的变量定义、初始化和分配。全局变量可以在以后的测试用例中使用。全局变量仅在测试套件编辑器中可用。
在类型字段中输入全局变量的类型(必填)。按 CTRL+SPACE 以获取已知类型的列表。
在名称字段中输入全局变量的名称(必填)。如果定义了多个具有相同名称的变量,将报告警告。
在【值】字段中输入要分配给变量的初始化值。可接受任何有效的 C / C++ 初始化程序(常量、表达式等)。按 CTRL+SPACE 可获得已知变量的列表。
<Type> <Name> [= <Value>];
在【报文】步骤中输入一条简单的文本报文,它将在测试执行期间使用 CPPTEST_REPORT() 打印出来。【报文】步骤用于可追溯性或调试目的很有用。文本将原样打印(不允许使用任何变量或表达式),所有引号均会转义。
CPPTEST_REPORT(“<Message>”);
使用【参数】步骤来设置测试参数。测试用例将针对该步骤中的每一行独立执行。在单个测试用例中,仅允许执行一个【参数】步骤。可以使用参数 API 访问【参数】步骤中的值。【参数】步骤有两种模式:内置(表)模式和数据源模式。
启用 内置(表) 选项以直接在【参数】编辑器中输入值:
在这种模式下,每一列(A、B、C等)代表一个变量,每一行代表将在测试用例执行期间使用的数据向量。
启用【数据源】选项,然后输入现有数据源的名称。在按住空格键的同时按住 Control 键将显示可用数据源的名称:
输入数据源名称后,可以执行以下操作:
此模式使用已经定义的现有数据源,包括行和列的名称。您可以单击 更新列名 按钮显示现有数据源的列名。单击更新列名称 按钮时,只能显示列名称。 现有数据源中的行不会在此模式下显示。
N/A
您可以在【报告】步骤中设置报文,这些报文将在测试执行期间显示运行时值。此步骤可用于打印输入/输出值或用于调试目的。
从【类型】下拉列表的可用类型中选择一种报告类型。有关受支持的断言类型的完整列表,请参见测试用例验证宏。
可用参数取决于报告类型。按 CTRL+SPACE 可获得已知变量的列表。
<Type>([<P1>, <P2>, <P3>]);
存根配置 步骤允许您配置当前测试用例的存根行为。该步骤应放置在要进行配置的 Call 步骤之前。另请参见 配置存根行为。
操作字段指定配置存根行为的操作类型。可用操作将显示在下拉列表中。支持以下操作:
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 的列表。
/* 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 可获得已知变量的列表。
[<Type>] <Name> [= <Value>];
如果指定了多个设置返回值操作,则会按从上到下顺序进行处理。符合条件的最后一个操作将生效。
如果还为给定的函数和条件指定了调用原始操作,它将覆盖设置返回值操作并调用原始函数。
若要修改复杂类型的返回值, 请使用【基本操作】使用复杂类型的基本方法中所述的方法。
使用<stub parameter name>=<value>
语法在【参数】列中指定存根参数。也支持以分号分隔的列表。示例:
paramA=100; paramB=localVar; paramC=ByRef(globalVar) arrayParamD[3]=10 |
如果为同一参数指定了多个【设置参数】操作,则会按从上到下顺序进行处理。符合条件的最后一个操作将生效。
如果还为给定的函数和条件指定了调用原始操作,则将使用修改后的参数来调用原始函数。
若要修改复杂类型参数,请使用【基本操作】和 使用复杂类型的基本方法中所述的方法。
(可选)指定执行自定义操作的条件(条件列)
自定义操作将使用 Stubs API 以 C / C++ 代码表示:
CPPTEST_ON_CALL("<Function>")->[If()-><Condition>->]<Parameters> |
此操作可用于操作复杂类型值-如 使用复杂类型的基本方法中所述。
在存根步骤中输入值时,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) |
If().Arg("param1").Greater().Value(10)
简化和扩展语法不能在单一条件下混合使用。