检索智能标记识别器
要测试智能标记
![](/icons/85433dou.gif)
首先需要获得智能标记识别器
![](/icons/85433de.gif)
![](/icons/85433yi.gif)
个例子
![](/icons/85433dou2.gif)
清单 1 显示了用来从 Information Bridge Framework 举例解决方案中获得识别器
![](/icons/85433de.gif)
代码
![](/icons/85433dou2.gif)
首先
![](/icons/85433dou.gif)
例子化 RecognizerCollection
![](/icons/85433dou.gif)
并且
![](/icons/85433diaoyong.gif)
它
![](/icons/85433de.gif)
LoadRecognizers 思路方法
![](/icons/85433dou2.gif)
LoadRecognizers
![](/icons/85433diaoyong.gif)
找到已安装
![](/icons/85433de.gif)
识别器
![](/icons/85433dou.gif)
并且试图例子化它们
![](/icons/85433dou2.gif)
默认行为是 MSTDSL 告诉智能标记它是 Microsoft Office Word 2003
![](/icons/85433de.gif)
![](/icons/85433yi.gif)
个例子(通过将值 Word.Application.11 传递给该标记
![](/icons/85433de.gif)
AppName 属性)
![](/icons/85433dou2.gif)
如果您希望测试使用区别
![](/icons/85433de.gif)
值
![](/icons/85433dou.gif)
则可以在
![](/icons/85433diaoyong.gif)
LoadRecognizers 的前直接在集合上设置 AppName 属性
![](/icons/85433dou2.gif)
在加载它的后
![](/icons/85433dou.gif)
在找到
![](/icons/85433de.gif)
所有识别器中进行迭代
![](/icons/85433dou.gif)
并且查看名称属性以查找具有预期名称
![](/icons/85433de.gif)
属性
![](/icons/85433dou2.gif)
如果您
![](/icons/85433de.gif)
目
![](/icons/85433de.gif)
是测试操作智能标记
![](/icons/85433dou.gif)
则用于获得例子
![](/icons/85433de.gif)
步骤是相同
![](/icons/85433de.gif)
![](/icons/85433dou.gif)
区别的处在于由 ActionCollection 对象
![](/icons/85433de.gif)
LoadActions 思路方法加载所需
![](/icons/85433de.gif)
操作
![](/icons/85433dou2.gif)
此外
![](/icons/85433dou.gif)
智能标记 API 接口
![](/icons/85433de.gif)
版本 2 对于操作和识别器都有
![](/icons/85433yi.gif)
个 SmartTagInitialize 思路方法
![](/icons/85433dou2.gif)
ActionCollection 对象和 RecognizerCollection 对象的间
![](/icons/85433de.gif)
![](/icons/85433yi.gif)
个区别是:ActionCollection 对象在它实现
![](/icons/85433de.gif)
ISmartTagAction2 接口中加载操作时
![](/icons/85433dou.gif)
![](/icons/85433diaoyong.gif)
该 SmartTagInitialize 思路方法
![](/icons/85433dou2.gif)
清单 1. 从举例解决方案中检索识别器
RecognizerCollection recognizers =
![](/icons/85433new.gif)
RecognizerCollection
![](/icons/85433kh.gif)
;
recognizers.LoadRecognizers
![](/icons/85433kh.gif)
;
foreach(Recognizer rec in recognizers)
{
![](/icons/85433if.gif)
(rec.Name
![](/icons/85433dd.gif)
\"IBF Sample\")
{
![](/icons/85433return.gif)
rec;
}
}
![](/icons/85433return.gif)
null;
检查必需
![](/icons/85433de.gif)
接口
通过使用举例解决方案识别器
![](/icons/85433de.gif)
例子
![](/icons/85433dou.gif)
还可以检查并确保识别器实现了必需
![](/icons/85433de.gif)
接口
![](/icons/85433dou2.gif)
智能标记软件Software开发工具包 (SDK) 文档声明
![](/icons/85433dou.gif)
智能标记识别器起码必须实现 ISmartTagRecognizer
![](/icons/85433dou.gif)
而操作必须实现 ISmartTagAction
![](/icons/85433dou2.gif)
要测试接口
![](/icons/85433de.gif)
智能标记
![](/icons/85433dou.gif)
只需
![](/icons/85433diaoyong.gif)
MSTDSL 操作或识别器例子上
![](/icons/85433de.gif)
ImplementsInterface 思路方法
![](/icons/85433dou.gif)
如清单 2 所示
![](/icons/85433dou2.gif)
现在对这
![](/icons/85433yi.gif)
点进行测试似乎不切实际
![](/icons/85433dou.gif)
![](/icons/85433yinwei.gif)
您可能刚刚编写了代码并且知道您完成了该实现
![](/icons/85433dou.gif)
但是您没有办法知道某个将来
![](/icons/85433de.gif)
开发人员可能何时意外移除该实现
![](/icons/85433dou2.gif)
对于该举例解决方案
![](/icons/85433dou.gif)
操作和识别器还都实现了版本 2 接口(ISmartTagRecognizer2 和 ISmartTagAction2)
![](/icons/85433dou.gif)
因此对它们进行
![](/icons/85433de.gif)
测试也包括在内
清单 2. 测试必需
![](/icons/85433de.gif)
接口
Recognizer IBFRecognizer = GetIBFSampleRecognizer
![](/icons/85433kh.gif)
;
Assert.IsTrue(
IBFRecognizer.ImplementsInterface(\"ISmartTagRecognizer\"));
Assert.IsTrue(
IBFRecognizer.ImplementsInterface(\"ISmartTagRecognizer2\"));
测试智能标记
![](/icons/85433de.gif)
属性
智能标记必须实现
![](/icons/85433yi.gif)
些属性
![](/icons/85433dou.gif)
才能在 Microsoft Office 2003 中正常工作
![](/icons/85433dou2.gif)
根据属性
![](/icons/85433de.gif)
区别
![](/icons/85433dou.gif)
在返回这些值时发生
![](/icons/85433de.gif)
![](/icons/85433cuowu.gif)
(尤其是空值)可能产生不可预知
![](/icons/85433de.gif)
并且难以调试
![](/icons/85433de.gif)
结果
![](/icons/85433dou2.gif)
出于该原因
![](/icons/85433dou.gif)
用于确保来自这些属性
![](/icons/85433de.gif)
值提供预期结果
![](/icons/85433de.gif)
测试是有用
![](/icons/85433de.gif)
(清单 3)
![](/icons/85433dou2.gif)
可以使用相同
![](/icons/85433de.gif)
过程来测试操作智能标记中
![](/icons/85433de.gif)
属性
![](/icons/85433dou.gif)
本文随附
![](/icons/85433de.gif)
下载中包含了这方面
![](/icons/85433de.gif)
![](/icons/85433yi.gif)
个举例
![](/icons/85433dou2.gif)
[Page]
清单 3. 测试属性
Recognizer IBFRecognizer = GetIBFSampleRecognizer
![](/icons/85433kh.gif)
;
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);
针对识别器测试术语
识别器
![](/icons/85433de.gif)
主要用途是为 Microsoft Office 2003 提供相应
![](/icons/85433de.gif)
能力
![](/icons/85433dou.gif)
以便分析文本中是否存在特定于解决方案
![](/icons/85433de.gif)
术语
![](/icons/85433dou.gif)
并且在找到这些术语时公开
![](/icons/85433diaoyong.gif)
特定于解决方案
![](/icons/85433de.gif)
操作
![](/icons/85433de.gif)
能力
![](/icons/85433dou2.gif)
要测试该功能
![](/icons/85433dou.gif)
需要运用识别思路方法
![](/icons/85433dou2.gif)
举例解决方案实现了 ISmartTagRecognizer2
![](/icons/85433dou.gif)
并且它使用 Recognize2 思路方法进行识别
![](/icons/85433dou2.gif)
Recognize2 思路方法使识别器能够接收预分析
![](/icons/85433de.gif)
文本
![](/icons/85433dou.gif)
并且还使识别器能够利用各种语言
![](/icons/85433de.gif)
Microsoft Office 2003
![](/icons/85433de.gif)
某些功能
![](/icons/85433dou2.gif)
在 Microsoft Office 2003 外部
![](/icons/85433diaoyong.gif)
Recognize2 可能需要完成附加
![](/icons/85433de.gif)
工作
![](/icons/85433dou.gif)
但是 MSTDSL 提供了
![](/icons/85433yi.gif)
个简化
![](/icons/85433de.gif)
接口
![](/icons/85433dou.gif)
使您能够用和
![](/icons/85433diaoyong.gif)
Recognize 思路方法相同
![](/icons/85433de.gif)
方式
![](/icons/85433diaoyong.gif)
Recognize2
![](/icons/85433dou.gif)
如清单 4 所示
![](/icons/85433dou2.gif)
在内部
![](/icons/85433dou.gif)
MSTDSL 试图分析单词边界
![](/icons/85433dou.gif)
并且将已分析
![](/icons/85433de.gif)
文本和其他参数
![](/icons/85433yi.gif)
起传递给识别器
![](/icons/85433dou2.gif)
当然
![](/icons/85433dou.gif)
如果识别器不能区分它所识别
![](/icons/85433de.gif)
内容
![](/icons/85433dou.gif)
则它几乎没有任何价值
![](/icons/85433dou2.gif)
因此
![](/icons/85433dou.gif)
实现了相应
![](/icons/85433de.gif)
测试
![](/icons/85433dou.gif)
以确保识别器不会识别它不应当识别
![](/icons/85433de.gif)
文本(清单 5)
![](/icons/85433dou.gif)
如代码下载中所示
![](/icons/85433dou2.gif)
清单 4. 测试识别器上
![](/icons/85433de.gif)
已知术语
![](/icons/85433string.gif)
baseSentence = \"I am contacting you from \'{0}\'\"
+ \"and would like to get more information.\";
![](/icons/85433string.gif)
![](/icons/85433zhk2.gif)
termsToRecognize = { \"Woodgrove Bank\",
\"A. Datum Corporation\",
\"Lucerne Publishing\",
\"Contoso, Ltd.\" };
Recognizer ibfRecognizer = GetIBFSampleRecognizer
![](/icons/85433kh.gif)
;
foreach(
![](/icons/85433string.gif)
simpleTerm in termsToRecognize)
{
![](/icons/85433string.gif)
testSentence =
![](/icons/85433string.gif)
.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. 测试未识别
![](/icons/85433de.gif)
文本
Recognizer ibfRecognizer = GetIBFSampleRecognizer
![](/icons/85433kh.gif)
;[Page]
![](/icons/85433string.gif)
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);
测试操作上
![](/icons/85433de.gif)
谓词
操作根据通过对 InvokeVerb 和 InvokeVerb2
![](/icons/85433de.gif)
![](/icons/85433diaoyong.gif)
而
![](/icons/85433diaoyong.gif)
![](/icons/85433de.gif)
谓词来实现它
![](/icons/85433de.gif)
功能
![](/icons/85433dou2.gif)
对于 Information Bridge Framework 举例解决方案而言
![](/icons/85433dou.gif)
操作是通过使用特定于 Information Bridge Framework 但没有在这些测试
![](/icons/85433de.gif)
范围内重新创建
![](/icons/85433de.gif)
上下文实现
![](/icons/85433de.gif)
;因此
![](/icons/85433dou.gif)
对
![](/icons/85433diaoyong.gif)
特定谓词
![](/icons/85433de.gif)
结果进行
![](/icons/85433de.gif)
测试未包含在内
![](/icons/85433dou2.gif)
但是
![](/icons/85433dou.gif)
有
![](/icons/85433yi.gif)
个用于确保操作公开了预期谓词
![](/icons/85433de.gif)
测试
![](/icons/85433dou2.gif)
清单 6 中显示
![](/icons/85433de.gif)
测试首先获得对举例解决方案操作
![](/icons/85433de.gif)
引用
![](/icons/85433dou2.gif)
您知道对象只公开了
![](/icons/85433yi.gif)
个谓词
![](/icons/85433dou.gif)
并且该谓词是用 ID 101 公开
![](/icons/85433de.gif)
![](/icons/85433dou.gif)
因此测试首先确保智能标记只公开了
![](/icons/85433yi.gif)
个谓词
![](/icons/85433dou2.gif)
然后
![](/icons/85433dou.gif)
测试接着基于预期
![](/icons/85433de.gif)
ID 101 来检查该谓词
![](/icons/85433de.gif)
名称和标题
![](/icons/85433dou2.gif)
清单 6. 测试操作上
![](/icons/85433de.gif)
谓词
Action ibfAction = GetIBFSampleAction
![](/icons/85433kh.gif)
;
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));
小结
单元测试是开发人员
![](/icons/85433de.gif)
工具箱中
![](/icons/85433de.gif)
![](/icons/85433yi.gif)
种必备
![](/icons/85433de.gif)
工具
![](/icons/85433dou.gif)
而 Information Bridge Framework 开发
![](/icons/85433de.gif)
特性使该工具变得更加关键
![](/icons/85433dou2.gif)
针对 Information Bridge Framework 进行开发
![](/icons/85433de.gif)
重要保证的
![](/icons/85433yi.gif)
![](/icons/85433dou.gif)
是只需使用很少
![](/icons/85433de.gif)
代码就可以向用户公开大量
![](/icons/85433de.gif)
功能
![](/icons/85433dou2.gif)
使用 MSTDSL 进行自动单元测试和针对 Information Bridge Framework 进行开发非常适合
![](/icons/85433dou.gif)
![](/icons/85433yinwei.gif)
它使您能够用很少
![](/icons/85433de.gif)
代码实现单元测试
![](/icons/85433dou2.gif)
MSTDSL 以源代码下载
![](/icons/85433de.gif)
形式在它自己
![](/icons/85433de.gif)
GotDotNet 工作区中提供
![](/icons/85433dou.gif)
这使您可以修改 MSTDSL 引擎以满足自己
![](/icons/85433de.gif)
需要
![](/icons/85433dou2.gif)
鼓励每个人分解、增强、批评并最终改善该库和关联
![](/icons/85433de.gif)
实用工具