在测试期间,C++test 将根据所选测试配置的生成选项卡中定义的标准创建测试用例。
生成选项卡包含以下设置:
- 启用单元测试生成:控制 C++test 是否为测试范围内的代码生成测试用例。如果未勾选此选项,则无法配置所有其他测试生成参数。
常规选项卡
- 为代码生成测试:控制何时生成测试。请参阅常见测试生成目标获取设置帮助。可选项包括:
- 没有测试套件:C++test 将为没有任何有效测试套件的代码生成测试。C++test 会根据在执行> 常规选项卡中指定的条件搜索可用的测试套件。
- 具有过期的测试套件:C++test 将为相关测试套件生成后修改过的代码生成测试。旧的测试将被覆盖。
- 具有最新的测试套件:C++test 将为相关测试套件生成后未修改过的代码生成测试。
- 生成测试的函数的访问级:控制 C++test 是否为 public /全局函数、protected 函数和 private 函数生成测试。
- 必须启用访问私有成员插桩选项才能为 protected 函数或 private 函数生成测试。此选项由执行> 常规> 插桩模式控制。
- 生成的测试用例的最大数量 (每个函数):C++test 将为每个函数生成的测试用例的最大数量。
- 添加测试用例的描述:控制生成的测试用例是否包含您提供的描述。
测试套件选项卡
- 测试套件输出文件和布局:测试套件的文件名、位置和粒度/布局。详细信息请参阅自定义生成选项。
- 当为具有现存测试套件的代码生成测试:控制 C++test 如何处理为已有测试套件的代码生成的新测试用例。新的测试用例可以替换或整合到已有的测试套件中。请参阅常见测试生成目标获取设置帮助。 可选项包括:
- 为没有测试的函数添加测试:C++test 将为没有测试的函数生成测试用例。现有测试不会受到影响或被修改。
- 为所有函数添加测试:C++test 将为所有函数生成测试用例。现有测试不会受到影响或被修改。
- 替换现有的测试套件:C++test 将为所有函数生成测试用例。现有测试套件将被删除,然后替换为新的测试套件。
- 当引用在测试套件中的测试文件时:控制 CPPTEST_CONTEXT 和 CPPTEST_TEST_SUITE_INCLUDED_TO 宏使用完整的项目路径或相对路径。
- 在大多数情况下,建议使用完整路径。相对路径可用于某些特定的情况,例如想要为在不同位置使用的代码生成测试并且希望在多个位置使用这些测试。例如,假设您有一个库的源文件可用于许多不同的项目,并且您有一些与该源代码关联的测试。在这种情况下,无论源代码放在项目中的什么位置,关联的测试都能够使用源代码(因为没有使用完整的路径)。
测试用例选项卡
- 初始化全局变量作为测试的前置条件:控制是否初始化全局变量。启用此选项后,自动生成的测试用例将初始化相关的全局变量作为前置条件。
- 使用派生类的对象:控制是否应将测试编译单元中定义的派生类的对象用作输入值。启用此选项后,C++test 在测试抽象类的方法时也会将此类派生类的对象用作主要测试对象。
- 为输入值使用探试法:控制是否应将启发式算法值用于输入值。
- 在前置/后置条件中使用非 public 类的成员:控制是否在前置/后置条件中使用非 public 类成员。例如,决定 C++test 是否可以使用 private 构造函数来创建类类型的对象,在成员逐一前置条件初始化中是否可以使用 private 字段,或者是否可以在测试用例后置条件中将 private 字段的值显示为结果。
- 必须启用访问私有成员插桩选项才能在前置/后置条件中使用非 public 类成员。此选项由执行> 常规>插桩模式控制。
- 指针使用 null 值:控制 C++test 是否使用 null 值来初始化测试用例前置条件中的指针对象。如果禁用,将不会在自动生成的测试用例中使用空指针。
- 对类/结构体对象使用递归初始化:控制类/结构体对象是否通过不同的非静态成员字段在前提条件中初始化。在该情况下,通过使用默认构造函数并为每个类/结构体成员字段赋值来创建对象。
- 使用工厂函数:配置 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 显示简单类型指针分配的第一个元素或固定数量的字节。
- 插入断言模板:控制是否将(注释掉的)断言插入到自动生成的测试用例中。