对 Information Bridge Framework 智能标记进行单元测试

发表于:2008-2-18 15:50  作者:未知   来源:网络转载

字体: | 上一篇 | 下一篇 |我要投稿 | 推荐标签:

检索智能标记识别器

  要测试智能标记,首先需要获得智能标记识别器的一个实例。清单 1 显示了用来从 Information Bridge Framework 示例解决方案中获得识别器的代码。首先,实例化 RecognizerCollection,并且调用它的 LoadRecognizers 方法。LoadRecognizers 调用找到已安装的识别器,并且试图实例化它们。默认行为是 MSTDSL 告诉智能标记它是 Microsoft Office Word 2003 的一个实例(通过将值 Word.Application.11 传递给该标记的 AppName 属性)。如果您希望测试使用不同的值,则可以在调用 LoadRecognizers 之前直接在集合上设置 AppName 属性。在加载它之后,在找到的所有识别器中进行迭代,并且查看名称属性以查找具有预期名称的属性。如果您的目的是测试操作智能标记,则用于获得实例的步骤是相同的,不同之处在于由 ActionCollection 对象的 LoadActions 方法加载所需的操作。

  此外,智能标记 API 接口的版本 2 对于操作和识别器都有一个 SmartTagInitialize 方法。ActionCollection 对象和 RecognizerCollection 对象之间的一个区别是:ActionCollection 对象在它实现的 ISmartTagAction2 接口中加载操作时,调用该 SmartTagInitialize 方法。

清单 1. 从示例解决方案中检索识别器

RecognizerCollection recognizers =
         new RecognizerCollection();
recognizers.LoadRecognizers();
foreach(Recognizer rec in recognizers)
{
   if(rec.Name == "IBF Sample")
   {
      return rec;
   }
}
return null;
检查必需的接口

  通过使用示例解决方案识别器的实例,还可以检查并确保识别器实现了必需的接口。智能标记软件开发工具包 (SDK) 文档声明,智能标记识别器起码必须实现 ISmartTagRecognizer,而操作必须实现 ISmartTagAction。要测试接口的智能标记,只需调用 MSTDSL 操作或识别器实例上的 ImplementsInterface 方法,如清单 2 所示。现在对这一点进行测试似乎不切实际,因为您可能刚刚编写了代码并且知道您完成了该实现,但是您没有办法知道某个将来的开发人员可能何时意外移除该实现。对于该示例解决方案,操作和识别器还都实现了版本 2 接口(ISmartTagRecognizer2 和 ISmartTagAction2),因此对它们进行的测试也包括在内。

清单 2. 测试必需的接口

Recognizer IBFRecognizer = GetIBFSampleRecognizer();
Assert.IsTrue(
   IBFRecognizer.ImplementsInterface("ISmartTagRecognizer"));
Assert.IsTrue(
   IBFRecognizer.ImplementsInterface("ISmartTagRecognizer2"));

测试智能标记的属性

  智能标记必须实现一些属性,才能在 Microsoft Office 2003 中正常工作。根据属性的不同,在返回这些值时发生的错误(尤其是空值)可能产生不可预知的并且难以调试的结果。出于该原因,用于确保来自这些属性的值提供预期结果的测试是有用的(清单 3)。可以使用相同的过程来测试操作智能标记中的属性,本文随附的下载中包含了这方面的一个示例。

清单 3. 测试属性

Recognizer IBFRecognizer = GetIBFSampleRecognizer();
        
Assert.AreEqual("IBF Sample", IBFRecognizer.Name);
Assert.AreEqual("Microsoft.Solutions.SampleSolution.SmartTagRecognizer",
            IBFRecognizer.ProgID);
Assert.AreEqual("Smart tag used to provide context in the "
      + "Information Bridge CRM Sample", IBFRecognizer.Description);
针对识别器测试术语

  识别器的主要用途是为 Microsoft Office 2003 提供相应的能力,以便分析文本中是否存在特定于解决方案的术语,并且在找到这些术语时公开调用特定于解决方案的操作的能力。要测试该功能,需要运用识别方法。示例解决方案实现了 ISmartTagRecognizer2,并且它使用 Recognize2 方法进行识别。

  Recognize2 方法使识别器能够接收预分析的文本,并且还使识别器能够利用各种语言的 Microsoft Office 2003 的某些功能。在 Microsoft Office 2003 外部调用 Recognize2 可能需要完成附加的工作,但是 MSTDSL 提供了一个简化的接口,使您能够用与调用 Recognize 方法相同的方式调用 Recognize2,如清单 4 所示。在内部,MSTDSL 试图分析单词边界,并且将已分析的文本与其他参数一起传递给识别器。当然,如果识别器不能区分它所识别的内容,则它几乎没有任何价值。因此,实现了相应的测试,以确保识别器不会识别它不应当识别的文本(清单 5),如代码下载中所示。

清单 4. 测试识别器上的已知术语

string baseSentence = "I am contacting you from '{0}'"
   + "and would like to get more information.";
string[] termsToRecognize = { "Woodgrove Bank",
            "A. Datum Corporation",
            "Lucerne Publishing",
            "Contoso, Ltd." };
Recognizer ibfRecognizer = GetIBFSampleRecognizer();
foreach(string simpleTerm in termsToRecognize)
{
   string testSentence = string.Format(baseSentence,
                  simpleTerm);
   RecognizerResponses responses = ibfRecognizer.Recognize2(testSentence,
                     IF_TYPE.IF_TYPE_PARA);
   Assert.AreEqual(1, responses.Count);
   Assert.AreEqual(responses[0].TagName,
   "http://schemas.microsoft.com/InformationBridge/2004#reference"); }


【福利】填问卷送精选测试礼包+接口测试课程!为测试行业做点事!
32/3<123>

评 论

论坛新帖

顶部 底部


建议使用IE 6.0以上浏览器,800×600以上分辨率,法律顾问:上海瀛东律师事务所 张楠律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2020, 沪ICP备05003035号
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪公网安备 31010102002173号

51Testing官方微信

51Testing官方微博

扫一扫 测试知识全知道