WMQTest 接口
为 IBM® MQ Explorer 编写的测试必须属于一个 Java™ 类,该类扩展了所提供的 WMQTest 类。本主题说明所提供方法的接口和操作。
测试属性
通过使用一组属性在插件清单文件 (plugin.xml) 中定义一个测试。下表列出了测试的属性。
属性 | 描述 |
---|---|
id | 为测试提供唯一标识的字符串。 |
name | 测试的有意义的名称。 |
class | 包含测试源代码的 Java 类的名称。 |
testset | 一个字符串,它定义要显示测试的组;例如,wmq,它在队列管理器测试类别中显示测试。 |
testsubset | 一个字符串,它定义要显示测试的子组;例如,queues,它在队列类别中显示测试。 |
description | 描述测试所执行操作的简短描述。 |
furtherinfo | HTML 或 XHTML 文档的位置,该文档包含关于测试的更多信息。当您在“运行测试”对话框中双击该测试或在“测试结果”视图中双击某个测试结果时,将在 IBM MQ Explorer 中显示此文档。 |
在 plugin.xml 文件中指定这些属性的值以定义测试。也可以使用下表中列出的 WMQTest 方法以程序方式访问这些属性。
方法 | 描述 |
---|---|
getTestID() | 返回测试标识。 |
getTestName() | 返回测试的名称。 |
getDescription() | 返回测试的描述。 |
getTestSet() | 返回为了成为此测试的父代而创建的测试集合对象的句柄。 |
getFurtherInfoPath() | 返回 XHTML 或 HTML 文档的位置,该文档包含关于测试的更多信息。 |
创建测试
IBM MQ Explorer“测试”引擎使用所提供的构造函数 WMQTest() 来将测试对象实例化。不需要生成此构造函数的子类。
测试结构
WMQTest 方法 runTest 定义测试的主体,将调用此方法来开始运行测试。
runTest 方法结束并不表示测试结束;必须使用 testComplete 方法显式地指定测试结束。您可以实现测试,以便它们以异步方式获取对象数据。
runTest 方法提交一个请求以获取关于对象的数据,而测试则从接收到应答的侦听器方法中运行。这使测试能够等待数据,而不必您来实现等待线程;样本 3 中演示了此过程。
如果在测试的过程中需要人工等待(睡觉),那么可以对测试对象使用对象监视器,以利用 Java wait 和 notify 方法。 实现测试引擎的线程技术时未使用个别测试对象的对象监视器。
运行测试
IBM MQ Explorer“测试”引擎调用 runTest(WMQTestEngine, IProgressMonitor,contextObjects, treeNode) 来开始运行测试。测试的主体必须在此处。
- WMQTestEngine
- WMQTestEngine
参数提供正在运行测试的测试引擎的句柄。
提供此参数是为了允许测试在运行中时使用测试引擎的 returnResult(WMQTestResult[], WMQTest) 方法返回结果。
此方法的第一个参数(WMQTestResult[])包含要返回的结果,而第二个参数(WMQTest)必须是“this”,以便测试引擎知道结果来自何处。使用 WMQTestEngine 参数返回中间结果是可选操作 - 或者,可以在完成测试时返回测试结果(请参阅完成测试)。
- IProgressMonitor
- IProgressMonitor 参数提供正在用于当前运行的测试的
GUI 反馈监视器的句柄。此参数允许您的测试不仅提供关于当前正在运行的任务和子任务的文本反馈,而且还提供表示当前完成情况的进度条。
进度监视器的句柄由 runTest 的缺省实现高速缓存,所以,如果已使用此缺省实现,那么也可以使用 WMQTest 方法 getGUIMonitor() 来访问进度监视器的句柄。
进度监视器是核心 Eclipse 资源。有关使用它的更多建议,请参阅 Web 上的 Eclipse API 文档。
- contextObjects
- contextObjects 参数提供 MQExtObject 数组。此参数提供要运行的测试的上下文,以便在用户打开“运行测试”对话框时预先选中了相关复选框。
- treeNode
- treeNode 参数记录单击了“导航器”视图中的哪些文件夹或对象来运行缺省测试或打开“运行测试”对话框。
用户首选项
测试必须符合使用“Eclipse 首选项”对话框提供的用户首选项。请使用以下方法来访问首选项:
- PreferenceStoreManager.getIncludeHiddenQmgrsPreference(),如果您将 IBM MQ Explorer 中已隐藏的队列管理器包含在测试中,那么此方法返回 true,如果必须排除这些队列管理器,那么此方法返回 false。
- 如果系统对象(名称以 SYSTEM. 开头的对象)必须包含在测试中,那么 PreferenceStoreManager.getIncludeSysObjsPreference() 将返回 true,如果必须排除这些对象,那么将返回 false。
完成测试
通过调用 testComplete(WMQTestResult[]) 并给它传递测试结果对象的数组来完成测试。有关测试结果对象的指导,请参阅创建测试结果。
可以使用此方法在完成时返回结果,也可以在测试运行期间返回测试结果(如运行测试中所述)。然而,返回了两次的任何结果都将显示两次。
即使您的测试使用 WMQTestEngine 方法 returnResult 来返回其所有结果,它仍必须在完成时调用 testComplete。要完成测试处理,必须执行此调用。如果没有任何新的结果要返回,那么您可以在 testComplete 方法中提供 WMQTestResult 对象的空数组。
有关更多信息,请参阅测试结构。
创建测试结果
将以 WMQTestResult 对象的形式来实现测试结果。请使用以下方法创建结果:
WMQTestResult(int severity, String description, String qmgrname, String objectType)
其中:
- severity 是标识问题严重性的整数。请使用以下某个严重性级别:IMarker.SEVERITY_ERROR、IMarker.SEVERITY_WARNING 或 IMarker.SEVERITY_INFO
- description 是说明测试所发现问题的字符串,将在“问题”视图中显示。
- qmgrname 是发现问题所在队列管理器的名称。
- objectType 是给出可以在其中找到问题的对象类的字符串,例如,“Queues”或“Channels”。
有关在创建测试结果对象后要对该对象执行哪些操作的更多信息,请参阅完成测试。
处理取消
您可以取消正在运行的测试。请使用方法 isCancelled() 来检查是否必须停止测试。
好的测试必须定期检查它是否已被取消,以避免不必要地耽误用户的时间。
如果您尝试取消某个测试,但该测试在一个较长的时间段内未能响应,那么测试引擎通过结束正在运行该测试的线程来强制该测试停止。请不要依赖此方法,最好是测试能够及时响应,以使测试能够清除其已使用的任何资源并返回迄今为止已生成的任何测试结果。
测试文档
您可以提供其他文档来说明测试返回的结果,并提供关于解决问题所必须执行的操作的指导。
请以 HTML 格式在提供测试的插件的 plugin.xml 文件中标识的位置提供文档。有关以 XML 格式定义测试的详细信息,请参阅创建新测试。
文档 HTML 文件的位置可以为以下几种:
- 内部 - 存储在提供测试的插件项目本身中。必须在与 plugin.xml 文件本身对应的 XML 文件中定义位置。例如,doc/TestDoc.html
- 外部 - 存储在 Web 服务器上,从而允许将文档与测试本身分开保存。必须将位置定义为以“http://”开头的完整 URL。