检索智能标记识别器
要测试智能标记,首先需要获得智能标记识别器的一个实例。清单 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"); }
【福利】填问卷送精选测试礼包+接口测试课程!为测试行业做点事!