有关受支持的 Green Hills 编译器的详细信息,请查阅 编译器。
BDF 创建/导入提供了 Green Hills INTEGRITY 项目集成 - 请查阅 导入 INTEGRITY 项目以进行单元测试或应用程序监视。
C++test 可以测试动态下载加载到 INTEGRITY 内核(由用户指定)上的 INTEGRITY 应用程序项目。 选择要测试的虚拟地址空间(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
文件以显示集成 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
and -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
流步骤的更多信息以及测试流执行的其他信息,请查阅 测试流说明和示例。
当使用 带有 Mem 监视 测试配置的 运行 GHS INTEGRITY 应用程序运行应用程序监视时,文件同步方法可能不足以满足适当的测试执行流。如果您的应用程序包含很少可报告的内存冲突,则结果文件可能不经常更新,这可能会导致不必要的超时。
除了增加超时时间,您可以使用 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() 函数的其他信息,请查阅 初始化和终止化。