有关支持的 Green Hills 编译器的详细信息,请参阅编译器。
Green Hills INTEGRITY 项目集成通过 BDF 创建/导入提供 - 请参阅导入 INTEGRITY 项目以进行单元测试或应用程序监控。
C++test 可以测试加载到 INTEGRITY 内核上的 Dynamic Download INTEGRITY Application Projects(由用户指定)。所选的虚拟地址空间(VAS)可以进行单元测试或应用程序监控。C++test 支持独立测试 VAS 项目,因此如果原始项目具有多个虚拟地址空间并且这些地址空间之间存在交互,则可能需要对集成(.int)文件进行一些手动修改。
C++test 通过支持以下 C/C++ 编译器来启用 INTEGRITY 应用程序的 Green Hills MULTI 项目测试。
提供以下组件以便于测试 Green Hills MULTI 项目:
Green Hills INTEGRITY 测试配置中提供以下属性:
C:\ghs\int1104\bin\sim800\kernel
:binDir=bin
作为其中一个标记添加到项目中。此参数将确保您原始的项目工件不会干扰 C++test 的自动化。C++test 以您的项目目录作为工作目录运行命令,因此留下的构建工件可能会在构建测试可执行文件时导致不必要的结果。 .int
文件以显示 Integrate GUI。对于 gpj 项目:
cpptesttrace --cpptesttraceProjectName=<VAS_name> --cpptesttraceOutputFile="<dir>\vas.bdf" gbuild -all -top <top_prj_name>.gpj <VAS_name>.gpj |
对于 Make 项目:
cpptesttrace --cpptesttraceProjectName=<VAS_name> --cpptesttraceOutputFile="<dir>\vas.bdf" make <target_for_chosen_VAS> |
-lhostio
和 -intfile=<path_to_integrate_file>
添加到选项部分的链接器选项字段中。C++test 需要与 hostio
库链接,以便使用 fopen()
将单元测试和覆盖率数据写入日志。intfile
文件是用于您的 INTEGRITY 应用程序的单个 VAS .int 文件;它强制在链接步骤完成后执行集成步骤。#include "INTEGRITY.h。
使用自动生成的桩函数时,INTEGRITY.h
头文件通常是必需的。grun
默认情况下,在测试配置属性中指定的内核使用 grun
启动,这是用于运行调试服务器的命令。执行 grun
命令时,默认超时为 180 秒。这可以确保在测试执行导致错误行为时,内核能够以可预测的方式停止。如果您发现执行测试所需的时间超过 180 秒,那么您可以通过修改 dbserv_timeout (<SetProperty key="dbserv_timeout" value="180" />)
的值属性或禁用 grun
来修改测试执行流程。
若要禁用 grun
,可取消注释测试执行流程编辑器中的以下行,以直接使用调试服务器运行指定的内核:
<!--SetProperty key="kernel_cmd" value="${cpptestproperty:dbserv} "${cpptestproperty:kernel}"" /→
注释掉测试执行流程编辑器中的以下行,以禁用执行内核的 grun
。
<SetProperty key="kernel_cmd" value="grun ${cpptestproperty:dbserv_timeout_opt} ${cpptestproperty:script_opt} ${cpptestproperty:dbserv} -- "${cpptestproperty:kernel}"" /> |
无论选择哪种方法运行内核,测试执行流程仍将尝试终结测试执行完成后可能正在运行的任何内核进程。
为了使测试执行流程能够识别测试执行已完成,采用了文件同步步骤,该步骤可在测试执行流程的底部找到:
<FileSynchronizeStep fileSync="${cpptest:testware_loc}/cpptest_results.tlog" fileInactiveTimeout="10000" /> |
此步骤跟踪测试日志文件的时间戳。测试日志文件会在每次执行测试时更新相关信息。如果 C++test 检测到日志文件在 10000 毫秒内处于非活动状态,则停止执行。如果您的单元测试可能会出现超过 10 秒的非活动时间,建议将 fileInactiveTimeout
属性的值增加到所需的超时值。有关 FileSynchronizeStep
流程步骤的更多信息以及测试流程执行的其他信息,请参阅测试流程说明和示例。
在使用 Run GHS INTEGRITY Application with Mem Monitoring 测试配置运行应用监控时,文件同步方法可能不足以确保正确的测试执行流程。如果应用程序中可报告的内存违规较少,结果文件的更新频率可能过低,从而导致意外超时。
除了增加超时时间,您还可以使用 FileSynchronizeStep
的另一种功能来强制 C++test 等待同步文件的生成以指示应用程序执行结束:
<FileSynchronizeStep fileSync="<path/to/synchronization/file.txt>" timeout="30000" /> |
该同步文件可以在应用程序代码内部手动创建,或者您可以提供 CppTest_Finalize
函数的实现,以手动写入 FileSynchronizeStep
等待的文件。CppTest_Finalize
函数会在应用程序执行的最后步骤中自动调用。
创建同步文件后,您可以将超时时间增加到足以覆盖应用程序运行时长的值。有关自定义初始化和终结的更多信息,请参阅初始化和终结。
如果被测函数中使用了 Exit()
调用,则可能需要对其进行打桩,以防止测试执行过早完成。如果有必要,您仍然可以通过实现 CppTest_Finalize
函数来调用 Exit()
,该函数会在应用程序执行的最后步骤中自动调用。有关自定义初始化和终结的更多信息,请参阅初始化和终结。
许多 C++test 测试配置使用了一种机制,可在个别测试用例出现意外行为导致测试可执行文件崩溃或中止时,自动重新运行测试可执行文件。此机制将从下一个未运行的单元测试开始重新运行测试可执行文件。但是,由于 Green Hills 框架中针对 INTEGRITY 应用程序的限制,该机制在测试 INTEGRITY 应用程序时不可用。如果单元测试导致测试执行提前终结,则单元测试将结束,并且仅能收集到终结前的测试结果。
尽管 C++test 最适用于单独测试单个 VAS,但在某些情况下,被测 VAS 可能需要与同一 INTEGRITY 应用程序中的另一个 VAS 交互。在这种情况下,将需要对工作流程进行一些手动自定义。需考虑以下内容:
在测试执行和应用程序监控期间,C++test 运行时依赖于调用静态对象的析构函数来完成一些必要的结束步骤。由于当前在 Green Hills MULTI v6.1.x C/C++ compiler v2013.1.x for INTEGRITY on PowerPC 中的限制,如果在您的项目中没有使用 -non_shared
标记,则静态对象的析构函数将不会被调用。如果未使用 -non_shared
编译器标记,您将需要在应用程序 main() 函数结束时手动插入对 CppTest_FinalizeRuntime() 函数的调用。这将允许 C++test 执行所有必需的终结步骤。有关如何使用 CppTest_FinalizeRuntime() 函数的其他信息,请参阅初始化和终结。