主要内容

Polyspace 平台用户界面中编写 C/C++ 单元测试

C/C++ 单元测试调用一个或多个函数,并检查函数返回值或函数的其他副作用是否与期望值一致。您可以在 Polyspace 平台用户界面中以图形化方式或使用基于 C/C++ xUnit 的 API 编写单元测试。

此示例展示了如何在 Polyspace 平台用户界面中以图形化方式编写和执行测试。此测试调用单个函数,使用特定的输入值,并验证该函数是否返回期望值。有关使用 xUnit API 编写测试的详细信息,请参阅使用 Polyspace Test xUnit API 编写 C/C++ 测试并通过命令行运行测试

示例文件

要遵循本教程中的步骤,请使用文件夹 polyspaceroot\polyspace\examples\doc_pstest\getting_started_test_manager 中的 algo.csaturate.c 源文件。其中,polyspaceroot 是 Polyspace® 的安装文件夹,例如 C:\Program Files\Polyspace\R2026a

本教程逐步展示了如何创建工程和编写测试。或者,您可以在 Polyspace 平台用户界面中打开预配置的工程,探索 Polyspace Test™ 的各种功能。请参阅Get Started with Polyspace Test Using Example Project

打开 Polyspace 平台用户界面

要打开 Polyspace 平台用户界面,请双击桌面快捷方式 Polyspace Test R2026a。如果您在安装过程中没有添加桌面快捷方式,请双击或以其他方式启动以下可执行文件:

polyspaceroot\polyspace\bin\polyspace-desktop-ui.exe
其中,polyspaceroot 是 Polyspace 的安装文件夹,例如 C:\Program Files\Polyspace\R2026a

设置工程

创建工程并将源文件添加到该工程中。

  1. 点击工具条中的新建按钮。导航到您想要保存该工程的位置,输入工程名称,然后点击保存

    工程在单独的节点中包括以下信息:

    • 代码 - C/C++ 源文件。

    • 配置 - 编译信息,例如包含路径和编译器标志。

    • 测试工件 - 与代码测试相关的工件,例如函数桩件和仿件。

    • 测试 - 您可以用图形格式或脚本编写的一个或多个测试。

  2. 右键点击代码节点,然后选择添加源文件。或者,点击工具条中的添加源文件按钮。选择源文件 algo.csaturate.c,并将它们添加到您的工程中。

指定编译信息

要分析源文件并随后编译工程,您必须指定编译器。如果您使用支持的编译器,它会被系统自动检测到。要查看是否检测到了编译器,请执行以下操作:

  1. 在工具条中,选择设置

  2. 测试和探查选项卡上,检查选项 C/C++ 主机编译器,查看是否检测到了编译器。

此编译器用于主机上的代码分析和工程编译。如果您安装了多个编译器,并且不想使用默认编译器来编译测试,您可以在工程配置中切换到另一个编译器:

  1. 要查看配置,请双击工程的配置节点,或点击工具条中工程选项卡上的配置

  2. 编译选项卡上,选择目标和编译器节点。要使用默认编译器,请将编译工具链(测试) 选项设置为自动检测。否则,请选择其他编译器和关联的工具链。

有关支持的编译器和其他配置设置的详细信息,请参阅:

解析源代码以自动填充测试信息

在编写测试用例之前,分析源文件以提取函数、输入参数和全局变量等信息。随后,当您编写测试时,Polyspace 平台用户界面会根据此分析显示可供测试的函数列表。选择某个函数后,Polyspace Test 会自动填充该函数的输入、使用的全局变量和其他信息。

要分析源文件,请执行以下操作:

  1. 在工具条中选择解析代码

  2. 分析完成后,检查工程窗格。在此窗格中,您会在每个文件下方看到该文件中定义的函数。您可以开始为这些函数编写图形化测试。

    Defined functions after a successful analysis

您可以在 Polyspace 平台用户界面中查看源代码,但不能编辑源代码。要查看某个函数在源代码中的位置,请在工程窗格中双击该函数的名称。在此示例中,请双击函数 saturate_value。此函数返回:

  • 其输入,如果输入在 -2 到 2 范围内。

  • -2 或 2,如果输入小于或大于这些限值。

有关代码分析的详细信息,请参阅Parse Source Code for Auto-Populating Test Information in Polyspace Platform User Interface

对未定义的函数和变量进行插桩

在编写测试之前,您可能必须对代码中未定义的函数和变量进行插桩。您可以在编译测试之前对未定义的函数进行插桩,也可以在编译测试时根据需要创建桩件。

示例工程包含一个未定义的函数 printError 和两个未定义的变量 minValuemaxValue。要对未定义的函数和变量进行插桩,请执行以下操作:

  1. 点击工具条中的代码资源管理器按钮 code explorer icon,查看该工程中的所有函数。未定义的函数和变量显示在未定义的符号节点下。

  2. 右键点击函数或变量名称,然后选择创建桩件。如果您将字段留空并选择应用Polyspace Test 将生成默认桩件。

    请不要编辑 printError(const char *) 的默认桩件。为 int maxValue 输入 2,为 int minValue 输入 -2。

有关桩件的详细信息,请参阅Test Functions with Undefined Callees in Polyspace Platform User Interface

编写测试用例

您可以编写的最简单的测试是调用单个函数并使用指定输入值的测试。该测试会将返回值和任何全局变量与您指定的期望值进行比较。

saturate_value 函数编写一个简单的测试:

  1. 工程窗格中右键点击 saturate_value 节点,然后选择添加测试用例

    或者,点击工具条中的代码资源管理器按钮 code explorer icon,查看该工程中的所有函数(包括头文件中定义的但工程树中未显示的函数)。找到函数 saturate_value,右键点击该函数,然后选择添加测试用例

  2. 新建测试用例窗格中,将测试名称更新为 Pass Test Case。该窗格名称会更改为 Pass Test Case。您可以视需要添加描述。

  3. 步骤区域中,您可以看到以下变化:

    • 函数 saturate_value(int) 被选择为在测代码

      要查看所选函数的定义,请点击该函数旁边的转至定义。点击 Pass Test Case 选项卡可返回测试。

    • 输入评估被调用方区域已预先填充有关该函数的信息。

  4. 输入子区域中,指定所有变量的值。对于此示例,在输入变量 value列中输入整数 2

    有关指定各种数据类型的输入的详细信息,请参阅Specify Test Inputs in Polyspace Platform User Interface

  5. 评估子区域中,为该函数的返回值或该函数修改的全局变量定义一个或多个评估。评估由值和比较运算符(例如 ==)组成。对于此示例,在变量 pst_call_out列中输入 2,在比较运算符列中输入 ==。变量 pst_call_out 表示函数返回值。

    有关指定评估的详细信息,请参阅Specify Test Assessments in Polyspace Platform User Interface

    pass test case example

指定输入值和评估值之后,便可以编译和运行测试。您还可以查看为此测试生成的代码。要查看测试代码,请点击工具条中测试用例选项卡上的测试代码按钮。您不能编辑此生成的代码。

使用以下设置创建第二个测试用例:

  • 名称 - Fail Test Case

  • 在测代码 - saturate_value(int)

  • 输入 - 将 value 设置为 2

  • 评估 - 将 pst_call_out 设置为 10,将比较运算符设置为 ==

启用代码覆盖率

Polyspace Test 可以计算代码覆盖率度量,该度量用于确定测试覆盖了多少代码。通过在工具条的探查区域中选择代码覆盖率而不是无探查来启用代码覆盖率计算。有关详细信息,请参阅Calculate C/C++ Code Profiling Metrics on Target in Polyspace Platform User Interface

编译和运行测试

编译测试工程并运行一个或多个测试:

  1. 点击工具条中的编译工程

    如果发生编译错误,日志窗格将以红色显示该错误。展开错误消息上方的编译日志,查看有关该错误的更多上下文。

  2. 点击工具条中的运行测试,运行所有测试。

    您还可以运行单个测试用例。在工程的测试节点下,右键点击一个测试用例并选择运行测试

步骤 9:审查结果

运行完成后,您会看到:

  • 最近结果窗格,它显示结果的摘要。如果有多个运行,此窗格将显示最近运行的结果摘要。

  • 结果窗格,它显示所有运行的结果。

结果窗格中,您会看到当前运行的两组结果,分别包括在单独的节点中:

  • 测试 - 此节点对应的是测试执行结果。如果测试节点显示 cross icon 图标,说明至少一个测试用例失败了。

  • 覆盖率 - 此节点对应的是代码覆盖率结果,仅在启用覆盖率计算时才会出现。

results pane example

双击结果窗格中的一个节点,查看有关通过测试和失败测试或代码覆盖率的详细信息。有关详细信息,请参阅:

另请参阅

主题