主要内容

Polyspace 平台用户界面中向工程添加 C/C++ xUnit 测试

通过 Polyspace® Test™,您可以使用以下方法之一编写 C/C++ 测试:

但在 Polyspace 平台用户界面中,您可以在工程中将使用图形化方式编写的测试和手写 C/C++ 测试结合起来。本主题展示了如何在 Polyspace 平台用户界面中向工程添加以 C/C++ 代码编写的测试,然后与以图形化方式编写的测试一起运行。

示例文件

要遵循本教程中的步骤,您可以使用以下任一文件夹中的源文件和测试文件:

  • polyspaceroot\polyspace\examples\doc_pstest\getting_started

  • polyspaceroot\polyspace\examples\doc_pstest\test_suites_setup_teardown

其中,polyspaceroot 是 Polyspace 的安装文件夹,例如 C:\Program Files\Polyspace\R2026a

或者,您可以在 Polyspace 平台用户界面中预配置的工程中探索使用 C/C++ xUnit API 编写的测试。请参阅Get Started with Polyspace Test Using Example Project

编写测试

使用 C/C++ xUnit API 编写的单元测试包括头文件 pstunit.h 中预定义的宏。这些宏封装了测试体,指定了测试配置(例如设置和拆解函数)并最终概述了测试断言。

例如,以下测试代码定义了一个名为 test_value_not_saturated 的测试,它测试函数 saturate_and_cache()

#include <pstunit.h>

/* Tested function. */
extern int saturate_and_cache(int value);

PST_SIMPLE_TEST(test_value_not_saturated) {
    int value_not_saturated = 5;
    int actual_value;
    
    actual_value = saturate_and_cache(value_not_saturated);
    PST_VERIFY_EQ_INT(actual_value, value_not_saturated);
}

PST_REGFCN(myRegFcn) {
    PST_ADD_SIMPLE_TEST(test_value_not_saturated);
}

#ifndef PSTEST_BUILD
int main(int argc, char **argv) {
    PST_REGFCN_CALL(myRegFcn);
    return PST_MAIN(argc, argv);
}
#endif
该测试使用 xUnit API 中的以下宏:

  • PST_SIMPLE_TEST,这个宏用于定义测试体。

  • PST_VERIFY_EQ_INT,这个宏用于评估其第一个参量是否等于其第二个参量。

  • PST_REGFCN,这个宏用于注册测试。如果您使用 Polyspace 平台工程编译和运行测试,则无需显示注册测试。在编译测试时会自动添加测试注册码。

  • PSTEST_BUILD,这个宏用于在 Polyspace 平台工程中编译测试时隐藏 main 函数。

    如果您通过命令行编译和运行测试代码,则需要在您的测试代码中包括 main 函数。在 Polyspace 平台用户界面中,自动添加了执行测试所需的 main 函数。如果自动添加的 main 与任何现有的 main 冲突,您可能会看到错误。宏 PSTEST_BUILD 可帮助解决这些错误。另请参阅Fix Multiple main Error in Polyspace Platform User Interface

有关 xUnit 测试的详细信息,请参阅:

向工程添加测试

在 Polyspace 平台用户界面中,在创建工程、添加源文件并执行初始代码分析后,您可以为源文件中的函数添加测试。有关如何创建工程和添加源文件的信息,请参阅在 Polyspace 平台用户界面中编写 C/C++ 单元测试

要添加 xUnit 测试,请执行以下操作:

  1. 工程窗格中右键点击您的工程的顶层节点,然后选择添加 Polyspace xUnit 测试文件

    您不仅可以添加单个文件,还可以添加包含测试文件的文件夹。在工程窗格中右键点击您的工程的顶层节点,然后选择添加 Polyspace xUnit 测试文件夹

  2. 导航到包含测试代码的 .c.cpp 文件并添加该文件。

    使用 C/C++ xUnit API 编写的测试显示在您的工程的 xUnit 测试 > 测试源下。

    A separate node appears in project for xUnit tests.

要查看添加到工程的所有测试文件和文件夹,请选择配置窗格中的工程选项卡。您可以分别在 Polyspace xUnit 测试文件Polyspace xUnit 测试文件夹区域中看到显式添加到工程中的测试文件和文件夹。

编译和运行测试

添加测试代码后,您可以编译和运行测试。请注意,通过用户界面来编译测试时仅支持特定的编译器。如果您没有安装支持的编译器,您可能会在编译测试时看到错误。如果看到错误,请安装支持的编译器,重新打开用户界面,然后开始编译测试。请参阅在 Polyspace 平台用户界面中指定用于测试的 C/C++ 编译器

  • 要编译 xUnit 测试,请在工程窗格中右键点击 xUnit 测试节点,然后选择编译测试

    或者,点击工具条中的编译工程来编译工程中的所有测试,包括图形化测试。

    编译完成后,每个测试在 xUnit 测试 > 测试可执行文件下显示为一个单独的节点。例如,下面的示例显示了一个测试 test_value_not_saturated

    A separate node appears in project for xUnit test executables.

  • 要运行某个测试,请右键点击与该测试对应的节点,然后选择运行测试。要运行所有测试,请右键点击节点 xUnit 测试 > 测试可执行文件,然后选择运行测试

    测试执行的结果显示在结果窗格中。要查看测试结果的详细信息,请右键点击此窗格中的测试节点,然后选择打开审查。请参阅Open Polyspace Results in Polyspace Platform User Interface

    Results of test execution

对测试执行进行故障排除

如果通过命令行成功编译和执行测试,但在通过 Polyspace 平台工程运行测试时失败,则问题可以追溯到所生成的附加测试代码。例如,当您通过 Polyspace 平台工程运行测试时,会自动生成一个测试注册函数。如果在此上下文中某个测试未执行,则它可能根本未注册。例如,匿名命名空间 (C++) 中的测试不会被添加到自动生成的注册函数中,因为该函数与这些测试位于不同的文件中,并且在编译时无法访问仅具有内部链接的匿名命名空间的内容。

要定位生成的测试代码,请查看为工件目录选项指定的文件夹。生成的测试代码位于此文件夹的子文件夹中。

另请参阅

主题