• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

在软件测试过程中用Information Bridge Framework 智能标记进行单元测试

发布: 2009-5-19 09:55 | 作者: 不详 | 来源: 测试时代采编 | 查看: 8次 | 进入软件测试论坛讨论

领测软件测试网

检索智能标记识别器

  要测试智能标记,首先需要获得智能标记识别器的一个实例。清单 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\"); }

清单 5. 测试未识别的文本

Recognizer ibfRecognizer = GetIBFSampleRecognizer();
string testSentence = \"This is a simple sentence, that \"
            + \"should have no recognition involved.\";
RecognizerResponses responses = ibfRecognizer.Recognize2(testSentence,
                  IF_TYPE.IF_TYPE_PARA);
Assert.AreEqual(0, responses.Count);
测试操作上的谓词

  操作根据通过对 InvokeVerb 和 InvokeVerb2 的调用而调用的谓词来实现它的功能。对于 Information Bridge Framework 示例解决方案而言,操作是通过使用特定于 Information Bridge Framework 但没有在这些测试的范围内重新创建的上下文实现的;因此,对调用特定谓词的结果进行的测试未包含在内。但是,有一个用于确保操作公开了预期谓词的测试。清单 6 中显示的测试首先获得对示例解决方案操作的引用。您知道对象只公开了一个谓词,并且该谓词是用 ID 101 公开的,因此测试首先确保智能标记只公开了一个谓词。然后,测试接着基于预期的 ID 101 来检查该谓词的名称和标题。

清单 6. 测试操作上的谓词

Action ibfAction = GetIBFSampleAction();
Assert.AreEqual(1,
   ibfAction.VerbCount(
   @\"http://schemas.microsoft.com/InformationBridge/2004#reference\"));
Assert.AreEqual(\"Show Account Information\", 
            ibfAction.VerbCaptionFromID(101));
Assert.AreEqual(\"ShowAccount\",
            ibfAction.VerbNameFromID(101));
小结

  单元测试是开发人员的工具箱中的一种必备的工具,而 Information Bridge Framework 开发的特性使该工具变得更加关键。针对 Information Bridge Framework 进行开发的重要保证之一,是只需使用很少的代码就可以向用户公开大量的功能。使用 MSTDSL 进行自动单元测试与针对 Information Bridge Framework 进行开发非常适合,因为它使您能够用很少的代码实现单元测试。

  MSTDSL 以源代码下载的形式在它自己的 GotDotNet 工作区中提供,这使您可以修改 MSTDSL 引擎以满足自己的需要。鼓励每个人分解、增强、批评并最终改善该库和关联的实用工具

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

TAG: Bridge framework Framework Information 软件测试 智能


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网