本主题说明如何在旨在使用 Wind River Tornado 编译器编译/构建和/或借助 Wind River Tornado IDE 编写的代码上配置和运行单元测试。

此章节:

关于单元测试

术语“单元测试”涵盖与构建和运行测试对象有关的所有内容。在执行单元测试之前,熟悉以下 C++test 术语/功能会有所帮助:

由于 VxWorks 测试对象/可重定位对象是通过 -r 选项链接的,因此不会检查符号(函数/变量)定义的存在,因此在链接期间不会报告发生的任何符号解析错误。因此,您不知道是否忘记定义这些定义,或者犯了一个阻止它们包含的范围错误—直到测试对象崩溃的执行阶段。要接收有关此类问题的预先警告,请确保用于单元测试的测试配置启用了对潜在链接器问题执行早期检查 选项(在 执行> 符号 选项卡中),并且配置为使用生成的外部 VxWorks 图像符号列表(如提供库符号的外部列表中所述)。

为了正确执行单元测试,必须正确设置所有项目设置 (有关设置的详细信息,请参阅 设置目标/平台依赖选项)。  

本主题的以下各节介绍如何构建 C/C++test 运行时库(如果您要手动执行此操作以进行其他控制/自定义),描述如何从 VxWorks 映像生成外部符号列表,提醒您使用时哪些 Tornado 工具必须先启动并运行,然后才能实际执行测试对象,熟悉专门为 Tornado 测试设计的测试配置,并说明测试流程的自定义如何使您能够根据需要调整测试对象以适合嵌入式测试的情况。 

有关单元测试的更多信息,请参见 测试创建和执行。 

了解和构建运行时库

要了解运行时库,请参阅 使用 C/C++test 运行时库。 

示例:使用 VxWorks 构建 Tornado 的运行时库

要使用 Tornado 工具和 VxWorks OS 构建运行时库(假设您已正确设置了所需的 Tornado 环境变量-请参见前提条件):

  1. 转到运行时库源根目录:<CPPTEST_INSTALL_DIR>/bin/engine/runtime.
  2. 输入命令
    make TARGET_CFG:=
    然后输入 WR_egcs_simnt_VxWorks5_4.mk 或 WR_gcc2_9_simnt_VxWorks5_5.mk
    (取决于您的 Tornado/VxWorks 版本)。

您还可以在命令行上指定以下变量:

示例:使用提供的 Tornado 项目/工作空间

要从 C++test 提供的 Tornado 项目或工作空间中构建运行时库,请执行以下操作:

  1. 转到 <CPPTEST_INSTALL_DIR>/bin/engine/runtime/项目
  2. 打开适当的项目或工作空间。从 Tornado2_0 or Tornado2_2里选择一个, 取决于您的 Tornado/VxWorks 版本。
  3. 构建打开的 C++testRtLib 项目。

您可以复制和编辑 <CPPTEST_INSTALL_DIR>/bin/engine/runtime/target 中可用的任何 .mk 目标配置,并将其提供给 TARGET_CFG 参数。您还可以向 Tornado 项目中添加其他构建目标,以调整构建选项和/或更改目标。 

生成外部 VxWorks 映像符号列表

需要使用外部符号列表才能使用【测试配置】构建 VxWorks 测试对象,测试配置已启用执行潜在链接问题的早期检查 选项—例如所有内建的与 Tornado 相关的测试配置。该列表应包含在 VxWorks 内核映像中定义的用于运行应用程序的所有符号。

您可以按以下方式生成此列表:

  1. 确保正确设置了所需的 Tornado 环境变量 - 请参见前提条件
  2. 复制内置的“嵌入式系统>Wind River>从 VxWorks 映像中提取符号”测试配置。
  3. 打开执行选项卡。
  4. 调整 符号列表工具名称 测试流程属性以匹配适合于用于创建映像的编译器的符号转储工具的名称,—例如, nmsimpc (用于 ccsimpc)。
  5. 根据需要调整 符号列表选项
  6. 设置 路径为 VxWorks 映像以扫描符号【测试流程】属性到您的 VxWorks 图像的路径,例如 "%WIND_BASE%\target\config\simpc\vxWorks"
  7. 运行调整后的配置

有关外部符号列表的更多信息,请参见提供库符号的外部列表

执行测试对象

当在用户指南的这一部分中使用术语“测试对象”时,是指从您的源文件和测试套件中产生的最终工件,必须执行该最终工件才能收集运行时数据(例如测试用例结果和覆盖率数据)。但是,在《 C/C++test 用户指南》的其他部分,使用术语“测试可执行文件”代替。我们在讨论嵌入式开发时会有所不同,因为嵌入式系统并不总是支持“可执行文件”,即二进制文件的类型,可以将其称为应用程序映像,并且可以由系统本身加载(解压缩)并执行。例如,在 VxWorks 5.4 和 VxWorks 5.5 的情况下,您可以构建一个在您的应用程序过程中链接的完整系统映像,或者您可以构建一个不完整的可重定位对象,其中仅包含来自您的应用程序的符号并在之后链接到预构建的系统映像。 

在对 VxWorks 进行 Tornado 测试的情况下,C/C++test 将尝试构建对象的第二种类型,最好将其描述为“测试可重定位”,并使用名为 Tornado Shell (windsh) 的原始 Tornado 工具运行它们。在启动运行时测试之前,您需要先安装 Tornado 注册表(wtxregd)和目标服务器(tgtsvr)并将其与运行 VxWorks 的目标连接(请参见前提条件)。

例如,要准备测试环境以在 VxWorks 模拟器上进行测试(假设您正确设置了所需的 Tornado 环境变量-请参见前提条件),则可以使用原始 Tornado 接口或以下示例步骤/命令: 

  1. 将 WIND_UID 环境变量设置为您的 UID。更多关于 WIND_UID 的详细信息,请参见 Tornado 用户指南。
  2. 启动 Tornado 注册表。
    wtxregd & '
  3. 启动 VxSim。
    "%WIND_BASE%\target\config\simpc\vxWorks" &

  4. 启动目标服务器。
    tgtsvr vxsim -B wdbpipe -R "C:\Temp" -RW &

VxSim 的默认 Tornado 装运版本已预先配置了对传递文件系统(PassFS)和目标服务器文件系统(TSFS)的支持。此支持以及上述设置,使测试对象能够通过文件通信(请参阅 Understanding and Building the Runtime Library)与运行时库的默认版本进行链接,并使用其中一个文件系统用来传输结果。 

有关 Tornado 工具和 VxWorks 的更多信息,请参考 Tornado 用户指南。 

了解 Tornado 测试配置

有几种专门用于 Tornado 项目的测试配置:

所有这些都可以在 嵌入式​​系统> Wind River> Tornado 类别中找到。 



这些【测试配置】均基于以下专门设计的测试流程配方(请参见Customizing Test Configurations through Test Flow Recipes): 

这是上述测试配置和测试流程配方中使用的术语的简短说明。 

您可能需要的其他内置测试配置是:

如果您需要构建自定义的 VxWorks/VxSim 版本以适合您的需求(例如,对于 C++ 代码,TSFS,网络),请参考《 Tornado 手册》中的说明。 

有关测试配置的更多信息,请参见配置用于政策的测试配置和规则。 

通过测试流程配方自定义测试配置 

对于嵌入式开发人员来说,熟悉单元测试处理流程和 C/C++test 应用于源代码的工具链非常重要。这种了解对于构建一个完全按照您期望的稳健流程至关重要。 

在不同环境中,大部分流程始终保持不变。在大多数情况下,不应更改流程步骤的顺序和参数。但是,在某些情况下,必须调整一些关键步骤。您可以使用【测试配置】管理器中的编辑器来配置测试执行流参数以适合您的特定需求。通常,不需要创建执行流的自定义版本,因为内建的测试配置允许轻松编辑最关键和最常修改的流属性。 

有关如何自定义测试流程的详细信息,请参见 自定义测试执行流

在极少数情况下,可能需要更高级的自定义。在这种情况下,您可以按照 定义自定义测试执行流中所述定义自定义测试流:Customizing the Test Execution Flow#Defining a Custom Test Execution Flow高级。如果您需要这样做,这里有一些提示和建议:

调试器测试用例

C/C++test 不支持此环境的直接测试用例调试。

使用'hostShell' 将 Test Executable 加载到目标内核,并在所需的测试用例上手动设置断点。