添加新的测试套件

要添加用户定义的测试用例:

  1. 如果尚未这样做,请为测试创建一个新目录。
    • 测试目录可以位于任何地方,只要它在项目树中可见即可。默认情况下,C++test 希望将测试存储在项目的 tests 目录的子目录中。然而,您可以使用不同的位置,只要相应地更改测试配置的 测试套件文件搜索 模式 设置(在 执行> 常规 选项卡中)。

       2.打开测试套件向导,如下所示:

    1. 选择项目树中 tests 目录。
    2. 选择 Parasoft> 向导> 创建新的测试套件。将打开一个向导。

     3.在【测试套件向导】对话框中输入测试套件参数。可用参数y有:

    • 测试套件名称:确定测试套件的名称。
    • 测试套件位置:确定测试套件的位置。
    • 测试套件文件:报告测试套件文件的路径。
    • 测试套件语言:确定测试套件是用 C 还是 C++ 实现的。
    • 测试文件:将测试套件上下文设置为指定的经过测试的源文件。指定的文件将被设置为 CPPTEST_CONTEXT 宏,该宏将给定的测试套件文件与指定的源文件相关联。
      • 如果在启动向导时选择了文件,则将在此处指定该文件。
      • 如果在启动向导时选择了项目,那么没有上下文将被指定,并且测试套件将在项目范围内(这意味着只有当项目的所有测试都运行时,或者它被选择为测试文件时,它才会被执行)。当它选择为测试文件时(不包含 CONTEXT),C++test 假设它有项目上下文,并准备项目中要链接的所有文件。
    • 测试套件模式:确定测试套件是作为包含的测试套件实现的,还是作为独立的测试套件实现的。C++test 测试两种类型的测试套件;它可以访问 private/protected 类成员。
      • 包含的测试套件实际上包含在生成的测试工具源文件之一中。包含的测试套件与插装的代码结合在一起,并被编译成一个单一的目标文件。所有自动生成的测试套件都包括在测试套件中。可以包括其他头文件,并且可以在原始头中定义宏定义。然而,包括的测试套件不需要包含任何标头,除非使用的类型在原始测试的源文件中不可见。通常,这只有在您修改生成的测试时才需要(例如,包括一个测试工厂等等)。
      • 独立的测试套件是单独编译的,并与可测试上下文的测试可执行文件链接在一起。所有其他标头必须直接包含在这些测试套件中。可以跟踪包含标题的覆盖信息。

     4.(可选) 如果您想在此处指定测试用例(例如,如果 C++test 将它们注册到测试套件中,并为测试添加骨架框架,单击 下一步,然后使用控件来添加测试用例名称,并指定添加它们的顺序。
     5.单击 完成

添加测试用例到现有测试套件

要添加测试用例到现有测试套件:

  1. 在项目树中选择测试套件文件,或在编辑器中将其打开,选择 Parasoft> C++test> 测试套件> 添加测试用例模板。 或者,右键单击测试用例资源管理器中的测试套件,并选择 新建> 测试用例模板

  2. 输入测试用例名称。  将添加新的测试用例,并相应地修改测试套件。
  3. 在编辑器中打开测试套件源文件,输入测试用例定义,并根据需要进行其他修改。您可以...

    • 使用头文件中定义的 include 伪指令和宏定义。
    • 使用 #include 指令构建测试可执行文件时,提示 C++test 包括其他文件。
    • 通过更改 CPPTEST_CONTEXT 宏来更改测试套件的上下文,该宏将给定的测试套件文件与指定的源文件相关联。只能指定一个源文件。如果未指定上下文,则在执行项目时将执行测试套件。
      • 在开始执行测试之前,在项目树(例如,资源文件)中选择了源文件或目录时,C++test 会扫描【测试配置】的测试搜索路径中指定的所有测试目录。所有匹配所选上下文的测试套件都将被执行。
      • 如果选择了整个项目,则将执行测试路径上的所有测试套件。
      • 如果选择了一个测试套件或单个测试,则使用 CONTEXT 宏回溯到与此测试套件相关的源文件。仅执行所选的测试套件。
      • 如果使用相对路径,则它们必须以“./”或“ ../”开头。

     4.保存修改后的文件。

测试驱动开发(TDD)技巧

生成的模板中的测试用例设置为失败。对于 TDD,您可以编写实现的源代码,然后在对测试感到满意时删除故障宏。

cout Statements that Spawn New Processes

如果您的单元测试带有生成其他进程的 cout 语句,请使用 endl 代替换行符来结束 cout 语句。这样,输出立即刷新到控制台。

例如,使用:

  • cout << "xyz" << endl;

而不是:

  • cout << "xyz\n";
  • No labels