本主题说明如何访问和浏览 C++test 自动生成的测试用例。
章节目录:
访问测试用例
自动生成的测试用例保存在测试套件文件中。使用默认设置,C++test 会为每个测试文件生成一个测试套件。也可以将其配置为为每个函数生成一个测试套件(详细信息,请参阅测试套件选项卡 )。
查看生成的测试用例的步骤:
- 在项目树中,找到 C++test 生成的测试套件文件。
- 默认情况下,自动生成的测试类保存在被测项目的
tests/autogenerated
目录中。 - 要检查或修改 C++test 测试套件文件保存的位置,可打开测试配置对话框,选择用于生成测试的测试运行的测试配置,然后查看生成> 测试套件选项卡的测试套件输出文件和布局字段中的值(详细信息请参阅测试套件选项卡)。
- 默认情况下,自动生成的测试类保存在被测项目的
- 双击生成的测试类的项目树节点。生成的测试类文件将在编辑器中打开。
了解测试用例
测试套件包含测试用例,使用以下架构:
- 测试套件是一种用于测试用例的框架。它有助于对测试用例进行分组。每个测试套件都包含一个从 CppTest_TestSuite 类派生的类定义、各种测试用例声明以及测试用例函数的定义。
- 为 C++ 函数或类方法生成的测试套件采用类的形式,并且测试用例是该类的公共方法。如果被测试的方法是类的成员,那么测试套件类会被设置为被测试方法所属类的友元。这种关联非常强大,因为它允许从测试用例内部控制被测试类的私有成员。
- C 代码的测试套件仅用作声明全局函数的“容器”(文件)。
- 测试用例是测试套件类的公共方法或全局函数(取决于它是为 C 还是 C++ 生成的),包含以下三个部分:
- 参数/前置条件赋值。
- 被测函数调用。
- 结果/后置条件验证。C++test 定义了一组用于控制和验证结果的宏。这些宏可将消息/断言从测试可执行文件传递到 C++test GUI。可用的宏可在 C++test API 文档中查看。
如果之后向测试文件中添加了更多函数,然后对更新后的文件运行测试生成,则会将额外的测试用例添加到原始测试套件文件中。
上下文和包含宏
每个测试套件都以下列两个宏开始:
CPPTEST_CONTEXT:
指定测试套件测试哪个文件。只能指定一个源文件。如果未指定上下文,则在执行项目时将执行测试套件。- 在开始执行测试之前,在项目树中选择了源文件或目录时,C++test 会扫描测试配置的测试搜索路径中指定的所有测试目录。所有匹配所选上下文的测试套件都将被执行。
- 如果选择了整个项目,则将执行测试路径上的所有测试套件。
- 如果选择了一个测试套件或单个测试,则使用 CONTEXT 宏回溯到与此测试套件相关的源文件。仅执行所选的测试套件。
CPPTEST_TEST_SUITE_INCLUDED_TO:
表示这是一个被包含的测试套件,并指定在构建测试可执行文件时,测试套件源代码将被包含在哪个文件中。如果要包括其他文件,则使用 #include 指令。
这两个宏指定的文件应始终与被测文件的名称匹配。如果待测试文件的名称更改,则必须相应地修改这些宏的值。
这两个宏都可以使用相对路径。相对路径必须以“./”或“../”开头。
后置条件宏
以下后置条件宏用于报告测试执行期间变量或类成员所具有的值:
- CPPTEST_POST_CONDITION_BOOL(value_string, value)
- CPPTEST_POST_CONDITION_INTEGER(value_string, value)
- CPPTEST_POST_CONDITION_UINTEGER(value_string, value)
- CPPTEST_POST_CONDITION_FLOAT(value_string, value)
- CPPTEST_POST_CONDITION_CSTR(value_string, value)
- CPPTEST_POST_CONDITION_CSTR_N(value_string, value, max_size)
- CPPTEST_POST_CONDITION_MEM_BUFFER(value_string, value, size)
- CPPTEST_POST_CONDITION_PTR(value_string, value)
这些宏的结果(报告的所有断言值)都显示在质量任务视图中。任何包含报告后置条件的测试用例都可以在回归测试中自动验证。验证将后置条件宏更改为断言,如果后续测试没有生成期望的(经过验证的)值,断言将会失败。这对于自动生成遗留代码的回归基准而言十分有用。有关验证的详细信息,请参阅验证测试用例以进行回归测试。
其他宏
验证后置条件时,将断言宏添加到测试用例。
此外,可以根据您的测试需求手动添加其他宏。
有关可以在测试用例中使用的宏的列表,请参阅 C++test API 文档。
测试函数
自动生成的测试用例有时包含特殊函数(例如,用于访问最小值或最大值)。
为了使用不同的数值生成测试用例,C++test 运行时库包含一组返回整数和浮点类型最小值/最大值的函数。这些函数的说明如下表所示。所有列出的函数都可以在用户定义的测试用例中使用。
功能 | 目的 |
---|---|
char cpptestLimitsGetMaxChar(void); | 返回 char 类型的最大值。 |
char cpptestLimitsGetMinChar(void); | 返回 char 类型的最小值。 |
signed char cpptestLimitsGetMaxSigned Char(void); | 返回 char 类型的最小值。 |
signed char cpptestLimitsGetMinSigned Char(void); | 返回有符号 char 类型的最小值。 |
unsigned char cpptestLimitsGetMaxUnsigned Char(void); | 返回无符号 char 类型的最大值。 |
short cpptestLimitsGetMaxShort(void); | 返回 short 类型的最大值。 |
short cpptestLimitsGetMinShort(void); | 返回 short 类型的最小值。 |
unsigned short cpptestLimitsGetMax UnsignedShort(void); | 返回无符号 short 类型的最大值。 |
int cpptestLimitsGetMaxInt(void); | 返回 int 类型的最大值。 |
int cpptestLimitsGetMinInt(void); | 返回 int 类型的最小值。 |
unsigned int cpptestLimitsGetMaxUnsigned Int(void); | 返回无符号 int 类型的最大值。 |
long cpptestLimitsGetMaxLong(void); | 返回 long 类型的最大值。 |
long cpptestLimitsGetMinLong(void); | 返回 long 类型的最小值。 |
unsigned long cpptestLimitsGetMaxUnsigned Long(void); | 返回无符号 long 类型的最大值。 |
float cpptestLimitsGetMaxPosFloat(void); | 返回 float 类型的最大正值。 |
float cpptestLimitsGetMinNegFloat(void); | 返回 float 类型的最小负值。 |
float cpptestLimitsGetMaxNegFloat(void); | 返回 float 类型的最大负值。 |
float cpptestLimitsGetMinPosFloat(void); | 返回 float 类型的最小正值。 |
double cpptestLimitsGetMaxPosDouble(void); | 返回 double 类型的最大正值。 |
double cpptestLimitsGetMinNegDouble(void); | 返回 double 类型的最小负值。 |
double cpptestLimitsGetMaxNegDouble(void); | 返回 double 类型的最大负值。 |
double cpptestLimitsGetMinPosDouble(void); | 返回 double 类型的最小正值。 |
long double cpptestLimitsGetMaxPosLong Double(void); | 返回 long double 类型的最大正值。 |
long double cpptestLimitsGetMinNegLong Double(void); | 返回 long double 类型的最小负值。 |
long double cpptestLimitsGetMaxNegLong Double(void); | 返回 long double 类型的最大负值。 |
long double cpptestLimitsGetMinPosLongDou-ble(void); | 返回 long double 类型的最小正值。 |
了解自动生成的桩函数
请参阅了解和自定义自动生成的桩函数。