在测试期间,C++test 将根据所【选测试配置】的【生成】标签中定义的标准创建测试用例。
【生成】选项卡包含以下设置:
- 启用单元测试生成:确定 C++test 是否在测试范围内为代码生成测试用例。如果未选中此选项,则所有其他测试生成参数都不相关。
常规选项卡
- 生成代码测试:确定何时生成测试。有关选择合适设置的帮助信息,请查阅 常见测试生成目标 。可用选项有:
- 没有测试套件:提示 C++test 为没有任何有效测试套件的代码生成测试。C++test 根据 执行>常规 选项卡中指定的条件搜索可用的测试套件。
- 具有过期的测试套件:提示 C++test 为自相关测试套件生成以来已修改的代码生成测试。旧的测试将被重写。
- 具有最新的测试套件:提示 C++test 为自相关测试套件生成以来已修改的代码生成测试。
- 生成函数访问级别的测试:确定 C++test 是否为公共/全局函数、受保护函数和私有函数生成测试。
- 必须启用 对私有成员访问 检测工具的权限,以便为受保护的功能或私有功能生成测试。有关该选项的更多信息,请查阅 执行选项卡 ,它由 执行>常规>检测模式控制。
- (每个函数)生成测试用例最大数量:确定每个函数 C++test 生成的最大测试用例数。
- 添加测试用例说明:确定生成的测试用例是否具有您提供的描述。
测试套件选项卡
- 测试套件输出文件和布局:确定测试套件的文件名称、位置和粒度/布局。有关详细信息,请查阅 自定义生成选项 。
- 使用现有测试套件为代码生成测试时:确定 C++test 如何处理使用现有测试套件为代码生成的新测试用例。新的测试用例可以替换现有的测试套件,也可以集成到其中。有关选择合适设置的帮助信息,请查阅 常见测试生成目标 。 可用选项有:
- 为没有测试的功能添加测试:C++test 将为没有测试的函数生成测试用例。现有测试将不会受到影响或修改。
- 添加所有功能的测试:C++test 将为所有函数生成测试用例。现有测试将不会受到影响或修改。
- 替换现有的测试套件:C++test 将为所有函数生成测试用例。现有的测试套件将被删除,然后替换为新的套件。
- 在测试套件中引用测试文件时:确定 CPPTEST_CONTEXT 和 CPPTEST_TEST_SUITE_INCLUDED_TO 宏使用完整的项目路径还是相对路径。
- 在大多数情况下,建议使用完整路径。相对路径在特殊情况下可能很有用。例如,当您要为在不同位置使用的代码生成测试时,并且您也想在多个位置使用测试时。例如,假设您拥有一个库的源文件,该库可以被许多不同的项目使用,并且您有一些与该源代码相关的测试。在那种情况下,无论源代码放在项目中的什么位置,连接的测试都应使用它(因为未使用完整路径)。
测试用例选项卡
- 初始化全局变量作为测试先决条件:确定是否初始化全局变量。启用此选项后,自动生成的测试用例会将相关的全局变量初始化为前提条件。
- 使用派生类的对象:确定是否应将在测试的编译单元中定义的派生类的对象用作输入值。启用此选项后,在测试抽象类的方法时,C++test 还将使用此类派生类的对象作为主要测试对象。
- 对输入值使用试探法:确定是否应将启发式值用于输入值。
- 在前/后置条件中使用非公共类成员:确定是否在前/后置条件中使用非公共类成员。例如,它确定 C++test 是否可以使用私有构造函数来创建类类型的对象,是否在成员先决条件初始化中使用私有字段,或者在测试用例后置条件中显示私有字段的值作为结果。
- 必须启用 对私有成员访问 检测工具的权限,以便为受保护的功能或私有功能生成测试。有关该选项的更多信息,请查阅 执行选项卡 ,它由 执行>常规>检测模式控制。
- 对指针使用 null 值: 确定 C++test 在测试用例的前提条件下是否使用空值初始化指针对象。如果禁用它,则在自动生成的测试用例中将不使用空指针。
- 对类结构对象使用成员初始化:确定是否通过更改非静态成员字段在前提条件中初始化类/结构对象。在这种情况下,通过使用默认构造函数并为每个 class/struct 成员字段赋值来创建对象。
- 使用工厂函数,请执行以下操作:配置 C++test 以使用工厂函数,如 使用工厂函数中所述。如果您希望专门使用工厂函数,也要启用 不要对带有工厂函数的类型使用其他初始化器。
重定向 stdin/stdout/stderr 流:确定 C++test 是否自动将流重定向代码插入到自动生成的测试用例中(您可以将一些数据添加到 stdin 和/或检查 stdout/err 作为后置条件)。测试用例代码如下所示:
... CppTest_StreamRedirect* _stdinStreamRedirect = CppTest_RedirectStdInput("some value"); CppTest_StreamRedirect* _stdoutStreamRedirect = CppTest_RedirectStdOutput(); CppTest_StreamRedirect* _stderrStreamRedirect = CppTest_RedirectStdError(); ... /* Tested function call */ ... /* Post-condition check */ ... CPPTEST_POST_CONDITION_CSTR_N("stdout", (CppTest_StreamReadData(_stdoutStreamRedirect, 0) ), 256) CPPTEST_POST_CONDITION_CSTR_N("stderr", (CppTest_StreamReadData(_stderrStreamRedirect, 0) ), 256)
- 测试对象的内存分配:确定是在堆栈上还是在堆上创建对象。
- 缓冲区分配大小:确定在先决条件中创建简单类型(如 char 或 int)缓冲区时应该分配的元素数量。
- 插入代码以报告测试用例的输入和输出:确定报告测试用例输入和输出值的宏是否插入到自动生成的测试用例中。
- 插入代码以报告测试用例结果: 确定是否将报告测试用例结果(后置条件)的宏插入自动生成的测试用例中。这样的宏可以在以后进行验证并自动转换为断言。
- 测试用例结果显示设置:确定字符串类型要显示的最大字符数以及简单类型指针的显示方法。对于后者,它允许您指定 C++test 是显示第一个元素还是显示固定类型的固定字节数。
- 插入断言模板:确定是否将(注释掉的)断言插入自动生成的测试用例中。