在 Polyspace 平台用户界面中向工程添加 C/C++ xUnit 测试
通过 Polyspace® Test™,您可以使用以下方法之一编写 C/C++ 测试:
在 Polyspace 平台用户界面中以图形化方式编写测试。
有关详细信息,请参阅在 Polyspace 平台用户界面中编写测试。
使用 C/C++ Polyspace Test xUnit API 编写测试。
有关详细信息,请参阅使用 C/C++ xUnit API 编写测试。
但在 Polyspace 平台用户界面中,您可以在工程中将使用图形化方式编写的测试和手写 C/C++ 测试结合起来。本主题展示了如何在 Polyspace 平台用户界面中向工程添加以 C/C++ 代码编写的测试,然后与以图形化方式编写的测试一起运行。
示例文件
要遵循本教程中的步骤,您可以使用以下任一文件夹中的源文件和测试文件:
polyspaceroot\polyspace\examples\doc_pstest\getting_startedpolyspaceroot\polyspace\examples\doc_pstest\test_suites_setup_teardown
其中, 是 Polyspace 的安装文件夹,例如 polyspacerootC:\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
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 测试,请执行以下操作:
在工程窗格中右键点击您的工程的顶层节点,然后选择添加 Polyspace xUnit 测试文件。
您不仅可以添加单个文件,还可以添加包含测试文件的文件夹。在工程窗格中右键点击您的工程的顶层节点,然后选择添加 Polyspace xUnit 测试文件夹。
导航到包含测试代码的
.c或.cpp文件并添加该文件。使用 C/C++ xUnit API 编写的测试显示在您的工程的 xUnit 测试 > 测试源下。

要查看添加到工程的所有测试文件和文件夹,请选择配置窗格中的工程选项卡。您可以分别在 Polyspace xUnit 测试文件和 Polyspace xUnit 测试文件夹区域中看到显式添加到工程中的测试文件和文件夹。
编译和运行测试
添加测试代码后,您可以编译和运行测试。请注意,通过用户界面来编译测试时仅支持特定的编译器。如果您没有安装支持的编译器,您可能会在编译测试时看到错误。如果看到错误,请安装支持的编译器,重新打开用户界面,然后开始编译测试。请参阅在 Polyspace 平台用户界面中指定用于测试的 C/C++ 编译器。
要编译 xUnit 测试,请在工程窗格中右键点击 xUnit 测试节点,然后选择编译测试。
或者,点击工具条中的编译工程来编译工程中的所有测试,包括图形化测试。
编译完成后,每个测试在 xUnit 测试 > 测试可执行文件下显示为一个单独的节点。例如,下面的示例显示了一个测试
test_value_not_saturated。
要运行某个测试,请右键点击与该测试对应的节点,然后选择运行测试。要运行所有测试,请右键点击节点 xUnit 测试 > 测试可执行文件,然后选择运行测试。
测试执行的结果显示在结果窗格中。要查看测试结果的详细信息,请右键点击此窗格中的测试节点,然后选择打开审查。请参阅Open Polyspace Results in Polyspace Platform User Interface。

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