随着MicrosoftOfficeInformationBridgeFramework1.0
![](/icons/95065de.gif)
推广
![](/icons/95065dou.gif)
MicrosoftOffice2003开发人员
![](/icons/95065de.gif)
工具箱中现在有了很多非常棒
![](/icons/95065de.gif)
新工具
![](/icons/95065dou2.gif)
公开MicrosoftOfficeProfessional2003中
![](/icons/95065de.gif)
InformationBridgeFramework功能
![](/icons/95065de.gif)
主要思路方法是智能标记;但是
![](/icons/95065dou.gif)
为智能标记创建自动单元测试可能是
![](/icons/95065yi.gif)
个很麻烦
![](/icons/95065de.gif)
过程
![](/icons/95065dou2.gif)
本文将讨论托管智能标记开发人员服务库(MSTDSL)
![](/icons/95065de.gif)
使用方法
![](/icons/95065dou.gif)
它位于可从Microsoft下载中心得体会到
![](/icons/95065de.gif)
MicrosoftOffice2003SmartTagDeveloperTools工具包中
![](/icons/95065dou.gif)
并且可以减小为基于InformationBridgeFramework
![](/icons/95065de.gif)
智能标记实现自动单元测试所需
![](/icons/95065de.gif)
工作量
对于像使用InformationBridgeFramework创建
![](/icons/95065de.gif)
解决方案
![](/icons/95065yi.gif)
样概略
![](/icons/95065de.gif)
解决方案
![](/icons/95065de.gif)
生存期中
![](/icons/95065de.gif)
所有元素进行完整
![](/icons/95065de.gif)
、自动
![](/icons/95065de.gif)
单元测试
![](/icons/95065dou.gif)
是
![](/icons/95065yi.gif)
个非常广泛
![](/icons/95065de.gif)
主题
![](/icons/95065dou.gif)
因而无法在本文范围内进行详尽
![](/icons/95065de.gif)
阐述
![](/icons/95065dou2.gif)
本文只是重点讨论如何测试解决方案
![](/icons/95065de.gif)
智能标记部分
![](/icons/95065dou.gif)
但是它当然不认为应该使单元测试终止于这
![](/icons/95065yi.gif)
地步
![](/icons/95065dou2.gif)
本文也不讨论如何实现智能标记
![](/icons/95065dou2.gif)
本文使用作为MicrosoftOfficeInformationBridgeFrameworkResourceKit1.0下载
![](/icons/95065de.gif)
![](/icons/95065yi.gif)
部分提供
![](/icons/95065de.gif)
举例解决方案作为测试主体
![](/icons/95065dou2.gif)
此外
![](/icons/95065dou.gif)
本文进行了下列假设:
您熟悉使用托管代码开发智能标记
您知道如何使用NUnit来自动执行单元测试
您已经安装了InformationBridgeFramework以及关联
![](/icons/95065de.gif)
举例客户关系管理解决方案
为什么使用自动单元测试?
尽管没有
![](/icons/95065yi.gif)
种工具或技术能够保证从给定
![](/icons/95065de.gif)
代码片段中消除所有缺陷
![](/icons/95065dou.gif)
但单元测试是您在代码中工作时可以使用
![](/icons/95065de.gif)
少数几种技术的
![](/icons/95065yi.gif)
![](/icons/95065dou2.gif)
通过单元测试
![](/icons/95065dou.gif)
可以在开发期间以及以后
![](/icons/95065de.gif)
维护期间捕捉到缺陷
![](/icons/95065dou2.gif)
![](/icons/95065yi.gif)
些估计显示
![](/icons/95065dou.gif)
开发期间
![](/icons/95065de.gif)
单元测试有可能从给定
![](/icons/95065de.gif)
代码部分中消除15%到55%
![](/icons/95065de.gif)
缺陷(SoftwareQuality:AnalysisandGuidelinesforSuccess,
CapersJones,InternationalThomsonComputerPress,1997)
![](/icons/95065dou2.gif)
尽管这是对单元测试
![](/icons/95065de.gif)
价值
![](/icons/95065de.gif)
强有力
![](/icons/95065de.gif)
证明
![](/icons/95065dou.gif)
但我们
![](/icons/95065de.gif)
看法是
![](/icons/95065dou.gif)
只有在最初
![](/icons/95065de.gif)
开发的后
![](/icons/95065dou.gif)
单元测试—更具体地说应该是自动单元测试(当用每个更改或生成运行测试时)—才会真正体现出它
![](/icons/95065de.gif)
价值
![](/icons/95065dou2.gif)
自动测试提供了附加保护
![](/icons/95065dou.gif)
以帮助确保更改不会意外改变现有
![](/icons/95065de.gif)
功能
在InformationBridgeFramework开发
![](/icons/95065de.gif)
上下文中
![](/icons/95065dou.gif)
需要考虑几件事情
![](/icons/95065dou2.gif)
首先
![](/icons/95065dou.gif)
“转椅”信息工作者所完成
![](/icons/95065de.gif)
工作
![](/icons/95065de.gif)
特点是需求不断演化—有时会非常快速
![](/icons/95065dou2.gif)
这些新
![](/icons/95065de.gif)
需求可能由新
![](/icons/95065de.gif)
工作要求引起
![](/icons/95065dou.gif)
由对基础信息资源
![](/icons/95065de.gif)
更改引起
![](/icons/95065dou.gif)
或者只是由了解到更多有关这些人完成工作
![](/icons/95065de.gif)
方式
![](/icons/95065de.gif)
信息而引起
![](/icons/95065dou2.gif)
但是
![](/icons/95065dou.gif)
重要
![](/icons/95065de.gif)
是来自这些开发项目
![](/icons/95065de.gif)
信息可能用来进行业务关键
![](/icons/95065de.gif)
决策(它可能仅仅基于通过该开发公开
![](/icons/95065de.gif)
信息)
![](/icons/95065dou2.gif)
如果功能不是对于开发
![](/icons/95065de.gif)
每个迭代都可靠
![](/icons/95065dou.gif)
则发生灾难性后果
![](/icons/95065de.gif)
可能性是巨大
![](/icons/95065de.gif)
![](/icons/95065dou2.gif)
既然快速而准确地调整InformationBridgeFramework解决方案以适应不断更改
![](/icons/95065de.gif)
需求是如此重要
![](/icons/95065dou.gif)
那么不难看出自动单元测试对于这些开发项目
![](/icons/95065de.gif)
每个部分是何等关键
![](/icons/95065dou2.gif)
就像任何工具
![](/icons/95065yi.gif)
样
![](/icons/95065dou.gif)
自动单元测试不应当成为您唯
![](/icons/95065yi.gif)
![](/icons/95065de.gif)
测试项目
![](/icons/95065dou2.gif)
[Page]
使用MSTDSL
MSTDSL用于简化对智能标记
![](/icons/95065de.gif)
某些最常见功能以及对某些系统级别智能标记设置
![](/icons/95065de.gif)
访问
![](/icons/95065dou2.gif)
MSTDSL
![](/icons/95065de.gif)
能力涵盖了非常广泛
![](/icons/95065de.gif)
功能
![](/icons/95065dou2.gif)
为了更加明了
![](/icons/95065dou.gif)
本文只讨论针对指定
![](/icons/95065de.gif)
解决方案实现单元测试所需
![](/icons/95065de.gif)
思路方法
![](/icons/95065dou2.gif)
该讨论主要集中于构成MSTDSL
![](/icons/95065de.gif)
命名空间中
![](/icons/95065de.gif)
两个命名空间:识别器和操作
![](/icons/95065dou2.gif)
来自这些命名空间
![](/icons/95065de.gif)
例子支持对已安装
![](/icons/95065de.gif)
智能标记进行枚举、检索特定
![](/icons/95065de.gif)
智能标记例子、检查属性
![](/icons/95065dou.gif)
并且在某些情况下
![](/icons/95065dou.gif)
支持
![](/icons/95065diaoyong.gif)
智能标记接口上
![](/icons/95065de.gif)
思路方法并且无须将它们加载到MicrosoftOffice2003中
该库提供了用于访问识别器和操作
![](/icons/95065de.gif)
类似思路方法
![](/icons/95065dou2.gif)
首先
![](/icons/95065dou.gif)
分别例子化命名空间集合RecognizerCollection和ActionCollection
![](/icons/95065dou.gif)
然后
![](/icons/95065diaoyong.gif)
各自
![](/icons/95065de.gif)
加载思路方法(LoadRecognizers或LoadActions)
![](/icons/95065dou2.gif)
通过使用上述任
![](/icons/95065yi.gif)
思路方法
![](/icons/95065dou.gif)
该
![](/icons/95065diaoyong.gif)
在系统注册表中查找已安装
![](/icons/95065de.gif)
智能标记
![](/icons/95065dou.gif)
并且试图例子化它找到
![](/icons/95065de.gif)
任何智能标记
![](/icons/95065dou2.gif)
在检索了您感兴趣
![](/icons/95065de.gif)
智能标记对象
![](/icons/95065de.gif)
例子的后
![](/icons/95065dou.gif)
MSTDSL为很多公开
![](/icons/95065de.gif)
思路方法提供了简化接口
![](/icons/95065dou2.gif)
应当介绍说明
![](/icons/95065de.gif)
是
![](/icons/95065dou.gif)
MSTDSL并未公开智能标记
![](/icons/95065de.gif)
每个属性或思路方法
![](/icons/95065dou.gif)
但是它
![](/icons/95065de.gif)
确提供了使用最常见属性或思路方法
![](/icons/95065de.gif)
能力
使用NUnit
NUnit是
![](/icons/95065yi.gif)
个自动单元测试框架
![](/icons/95065dou.gif)
完全使用C#编写(可以使用任何Microsoft.NET语言编写)
![](/icons/95065dou2.gif)
您通过在由NUnit框架中
![](/icons/95065de.gif)
属性描述
![](/icons/95065de.gif)
对象上实现思路方法来创建测试
![](/icons/95065dou2.gif)
在已经实现NUnit的后
![](/icons/95065dou.gif)
NUnit.exe文件(包括命令行和图形用户界面[GUI]文件)可以发现这些思路方法
![](/icons/95065dou.gif)
并且以自动方式运行它们
![](/icons/95065dou2.gif)
该框架极其灵活
![](/icons/95065dou.gif)
并且使测试可以查询各种条件以及查找预期
![](/icons/95065de.gif)
异常
![](/icons/95065dou2.gif)
NUnit下载随附了
![](/icons/95065yi.gif)
个举例项目
![](/icons/95065dou.gif)
该项目演示了测试思路方法
![](/icons/95065de.gif)
各种使用方式
![](/icons/95065dou.gif)
包括声明各种条件和测试预期
![](/icons/95065de.gif)
异常
![点击图片可在新窗口打开](/icons/95065int.gif)
er\" height=190 alt=d hspace=0 src=\"/Files/BeyondPic/2008-2/19/t.g
![](/icons/95065if.gif)
\" width=400 border=0>
NUnit 用于运行自动测试
![](/icons/95065de.gif)
测试应用
![](/icons/95065chengxu.gif)
当您使用 NUnit 时
![](/icons/95065dou.gif)
对各种条件
![](/icons/95065de.gif)
测试通过 NUnit.Framework.Assert 对象
![](/icons/95065de.gif)
多个静态思路方法进行了简化
![](/icons/95065dou2.gif)
NUnit 框架下载提供了有关该主题
![](/icons/95065de.gif)
文档
![](/icons/95065dou.gif)
但是该演示中
![](/icons/95065de.gif)
大多数测试都使用 Assert.IsTrue 思路方法来测试 True 条件
![](/icons/95065dou.gif)
并且使用 Assert.AreEqual 思路方法来查找预期
![](/icons/95065de.gif)
条件
![](/icons/95065dou2.gif)
如果在这两种情况下条件都失败了
![](/icons/95065dou.gif)
则整个测试失败
![](/icons/95065dou.gif)
并且 NUnit 应用
![](/icons/95065chengxu.gif)
会显示适当
![](/icons/95065de.gif)
信息
![](/icons/95065dou2.gif)
我们的所以选择 NUnit
![](/icons/95065dou.gif)
是
![](/icons/95065yinwei.gif)
它已经由很多开发人员使用
![](/icons/95065dou.gif)
它具有良好
![](/icons/95065de.gif)
介绍说明
![](/icons/95065dou.gif)
它被认为很稳定
![](/icons/95065dou.gif)
并且最好
![](/icons/95065de.gif)
![](/icons/95065yi.gif)
点在于它是免费
![](/icons/95065de.gif)
!尽管如此
![](/icons/95065dou.gif)
如果您使用
![](/icons/95065de.gif)
是除 NUnit 以外
![](/icons/95065de.gif)
测试框架
![](/icons/95065dou.gif)
那么请不要担心
![](/icons/95065dou2.gif)
只要您
![](/icons/95065de.gif)
测试环境支持 Microsoft .NET 框架
![](/icons/95065dou.gif)
您就能够使我们这里描述
![](/icons/95065de.gif)
技术适应您自己
![](/icons/95065de.gif)
测试环境