簡介
隨著 Microsoft Office Information Bridge Framework 1.0 的推廣,Microsoft Office 2003 開發(fā)人員的工具箱中現(xiàn)在有了很多非常棒的新工具。公開 Microsoft Office Professional 2003 中的 Information Bridge Framework 功能的主要方法是智能標記;但是,為智能標記創(chuàng)建自動單元測試可能是一個很麻煩的過程。本文將討論托管智能標記開發(fā)人員服務庫 (MSTDSL) 的用法,它位于可從 Microsoft 下載中心得到的 Microsoft Office 2003 Smart Tag Developer Tools 工具包中,并且可以減小為基于 Information Bridge Framework 的智能標記實現(xiàn)自動單元測試所需的工作量。
對于像使用 Information Bridge Framework 創(chuàng)建的解決方案一樣概略的解決方案的生存期中的所有元素進行完整的、自動的單元測試,是一個非常廣泛的主題,因而無法在本文范圍內(nèi)進行詳盡的闡述。本文只是重點討論如何測試解決方案的智能標記部分,但是它當然不認為應該使單元測試終止于這一地步。本文也不討論如何實現(xiàn)智能標記。本文使用作為 Microsoft Office Information Bridge Framework Resource Kit 1.0 下載的一部分提供的示例解決方案作為測試主體。此外,本文進行了下列假設:
您熟悉使用托管代碼開發(fā)智能標記。
您知道如何使用 NUnit 來自動執(zhí)行單元測試。
您已經(jīng)安裝了 Information Bridge Framework 以及關(guān)聯(lián)的示例客戶關(guān)系管理解決方案。
為什么使用自動單元測試?
盡管沒有一種工具或技術(shù)能夠保證從給定的代碼片段中消除所有缺陷,但單元測試是您在代碼中工作時可以使用的少數(shù)幾種技術(shù)之一。通過單元測試,可以在開發(fā)期間以及以后的維護期間捕捉到缺陷。一些估計顯示,開發(fā)期間的單元測試有可能從給定的代碼部分中消除 15% 到 55% 的缺陷 (Software Quality:Analysis and Guidelines for Suclearcase/" target="_blank" >ccess, Capers Jones, International Thomson Computer Press, 1997)。盡管這是對單元測試的價值的強有力的證明,但我們的看法是,只有在初的開發(fā)之后,單元測試 — 更具體地說應該是自動單元測試(當用每個更改或生成運行測試時)— 才會真正體現(xiàn)出它的價值。自動測試提供了附加保護,以幫助確保更改不會意外改變現(xiàn)有的功能。
在 Information Bridge Framework 開發(fā)的上下文中,需要考慮幾件事情。首先,“轉(zhuǎn)椅”信息工作者所完成的工作的特點是需求不斷演化 — 有時會非?焖。這些新的需求可能由新的工作要求引起,由對基礎信息資源的更改引起,或者只是由了解到更多有關(guān)這些人完成工作的方式的信息而引起。但是,重要的是來自這些開發(fā)項目的信息可能用來進行業(yè)務關(guān)鍵的決策(它可能僅僅基于通過該開發(fā)公開的信息)。如果功能不是對于開發(fā)的每個迭代都可靠,則發(fā)生災難性后果的可能性是巨大的。既然快速而準確地調(diào)整 Information Bridge Framework 解決方案以適應不斷更改的需求是如此重要,那么不難看出自動單元測試對于這些開發(fā)項目的每個部分是何等關(guān)鍵。像任何工具一樣,自動單元測試不應當成為您的測試項目。
使用 MSTDSL
MSTDSL 用于簡化對智能標記的某些常見功能以及對某些系統(tǒng)級別智能標記設置的訪問。MSTDSL 的能力涵蓋了非常廣泛的功能。為了更加明了,本文只討論針對指定的解決方案實現(xiàn)單元測試所需的方法。該討論主要集中于構(gòu)成 MSTDSL 的命名空間中的兩個命名空間:識別器和操作。來自這些命名空間的實例支持對已安裝的智能標記進行枚舉、檢索特定的智能標記實例、檢查屬性,并且在某些情況下,支持調(diào)用智能標記接口上的方法并且無須將它們加載到 Microsoft Office 2003 中。
該庫提供了用于訪問識別器和操作的類似方法。首先,分別實例化命名空間集合 RecognizerCollection 和 ActionCollection,然后調(diào)用各自的加載方法(LoadRecognizers 或 LoadActions)。通過使用上述任一方法,該調(diào)用在系統(tǒng)注冊表中查找已安裝的智能標記,并且試圖實例化它找到的任何智能標記。在檢索了您感興趣的智能標記對象的實例之后,MSTDSL 為很多公開的方法提供了簡化接口。應當說明的是,MSTDSL 并未公開智能標記的每個屬性或方法,但是它的確提供了使用常見屬性或方法的能力。
使用 NUnit
NUnit 是一個自動單元測試框架,完全使用 C# 編寫(可以使用任何 Microsoft .NET 語言編寫)。您通過在由 NUnit 框架中的屬性描述的對象上實現(xiàn)方法來創(chuàng)建測試。在已經(jīng)實現(xiàn) NUnit 之后,NUnit .exe 文件(包括命令行和圖形用戶界面 [GUI] 文件)可以發(fā)現(xiàn)這些方法,并且以自動方式運行它們。該框架極其靈活,并且使測試可以查詢各種條件以及查找預期的異常。NUnit 下載隨附了一個示例項目,該項目演示了測試方法的各種使用方式,包括聲明各種條件和測試預期的異常。
圖 1. NUnit 測試應用程序示例
NUnit 用于運行自動測試的測試應用程序
當您使用 NUnit 時,對各種條件的測試通過 NUnit.Framework.Assert 對象的多個靜態(tài)方法進行了簡化。NUnit 框架下載提供了有關(guān)該主題的文檔,但是該演示中的大多數(shù)測試都使用 Assert.IsTrue 方法來測試 True 條件,并且使用 Assert.AreEqual 方法來查找預期的條件。如果在這兩種情況下條件都失敗了,則整個測試失敗,并且 NUnit 應用程序會顯示適當?shù)男畔ⅰ?/p>
我們之所以選擇 NUnit,是因為它已經(jīng)由很多開發(fā)人員使用,它具有良好的說明,它被認為很穩(wěn)定,并且好的一點在于它是免費的!盡管如此,如果您使用的是除 NUnit 以外的測試框架,那么請不要擔心。只要您的測試環(huán)境支持 Microsoft .NET 框架,您能夠使我們這里描述的技術(shù)適應您自己的測試環(huán)境。