专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »软件测试 » Information Bridge Framework 智能标记进行单元测试(2) »正文

Information Bridge Framework 智能标记进行单元测试(2)

来源: 发布时间:星期四, 2009年2月12日 浏览:44次 评论:0


检索智能标记识别器

  要测试智能标记首先需要获得智能标记识别器个例子清单 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 =
RecognizerCollection;
recognizers.LoadRecognizers;
foreach(Recognizer rec in recognizers)
{
(rec.Name \"IBF Sample\")
{
rec;
}
}
null;
检查必需接口

  通过使用举例解决方案识别器例子还可以检查并确保识别器实现了必需接口智能标记软件Software开发工具包 (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)可以使用相同过程来测试操作智能标记中属性本文随附下载中包含了这方面个举例[Page]

清单 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. 测试识别器上已知术语

baseSentence = \"I am contacting you from \'{0}\'\"
+ \"and would like to get more information.\";
termsToRecognize = { \"Woodgrove Bank\",
\"A. Datum Corporation\",
\"Lucerne Publishing\",
\"Contoso, Ltd.\" };
Recognizer ibfRecognizer = GetIBFSampleRecognizer;
foreach( simpleTerm in termsToRecognize)
{
testSentence = .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;[Page]
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 引擎以满足自己需要鼓励每个人分解、增强、批评并最终改善该库和关联实用工具

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: