.Net开发人员应该下载的十种必备工具(二)
NUnit
NUnit 是為 .NET 框架生成的開放源代碼單元測試框架。NUnit 使您可以用您喜歡的語言編寫測試,從而測試應用程序的特定功能。當您首次編寫代碼時,單元測試是一種測試代碼功能的很好方法,它還提供了一種對應用程序進行回歸測試的方法。NUnit 應用程序提供了一個用于編寫單元測試的框架,以及一個運行這些測試和查看結果的圖形界面。
編寫 NUnit 測試
作為示例,我將測試 .NET 框架中 Hashtable 類的功能,以確定是否可以添加兩個對象并且隨后檢索這些對象。我的第一步是添加對 NUnit.Framework 程序集的引用,該程序集將賦予我對 NUnit 框架的屬性和方法的訪問權。接下來,我將創建一個類并用 TestFixture 屬性標記它。該屬性使 NUnit 可以知道該類包含 NUnit 測試:
| using System; using System.Collections; using NUnit.Framework; namespace NUnitExample { [TestFixture] public class HashtableTest { public HashtableTest() { } } }? |
? 下一步,我將創建一個方法并用 [Test] 屬性標記它,以便 NUnit 知道該方法是一個測試。然后,我將建立一個 Hashtable 并向其添加兩個值,再使用 Assert.AreEqual 方法查看我是否可以檢索到與我添加到 Hashtable 的值相同的值,如下面的代碼所示:
| [Test] public void HashtableAddTest() { Hashtable ht = new Hashtable(); ht.Add("Key1", "Value1"); ht.Add("Key2", "Value2"); Assert.AreEqual("Value1", ht["Key1"], "Wrong object returned!"); Assert.AreEqual("Value2", ht["Key2"], "Wrong object returned!"); } |
? 這將確認我可以首先向 Hashtable 中添加值并隨后檢索相應的值 — 這是一個很簡單的測試,但能夠表現 NUnit 的功能。存在許多測試類型以及各種 Assert 方法,可使用它們來測試代碼的每個部分。
要運行該測試,我需要生成項目,在 NUnit 應用程序中打開生成的程序集,然后單擊 Run 按鈕。圖 5 顯示了結果。當我看到那個大的綠色條紋時,我有一種興奮和頭暈的感覺,因為它讓我知道測試已經通過了。這個簡單的示例表明 NUnit 和單元測試是多么方便和強大。由于能夠編寫可以保存的單元測試,并且每當您更改代碼時都可以重新運行該單元測試,您不僅可以更容易地檢測到代碼中的缺陷,而且最終能夠交付更好的應用程序。
圖 5 NUnit
NUnit 是一個開放源代碼項目,并且可以從 http://www.nunit.org 下載。還有一個優秀的 NUnit Visual Studio .NET 外接程序,它使您可以直接從 Visual Studio 中運行單元測試。您可以在 http://sourceforge.net/projects/nunitaddin 找到它。有關 NUnit 及其在測試驅動開發中的地位的詳細信息,請參閱文章“Test-Driven C#: Improve the Design and Flexibility of Your Project with Extreme Programming Techniques”(MSDN ?Magazine 2004 年 4 月刊)。
FxCop
.NET 框架非常強大,這意味著存在創建優秀應用程序的極大可能,但是也同樣存在創建劣質程序的可能。FxCop 是有助于創建更好的應用程序的工具之一,它所采用的方法是:使您能夠分析程序集,并使用一些不同的規則來檢查它是否符合這些規則。FxCop 隨附了由 Microsoft 創建的固定數量的規則,但您也可以創建并包括您自己的規則。例如,如果您決定所有的類都應該具有一個不帶任何參數的默認構造函數,則可以編寫一條規則,以確保程序集的每個類上都具有一個構造函數。這樣,無論是誰編寫該代碼,您都將獲得一定程度的一致性。如果您需要有關創建自定義規則的詳細信息,請參閱 John Robbins 的有關該主題的 Bugslayer 專欄文章(MSDN ? Magazine 2004 年 6 月刊)。
那么,讓我們觀察一下實際運行的 FxCop,并且看一下它在我一直在處理的 NUnitExample 程序集中找到哪些錯誤。當您打開 FxCop 時,您首先需要創建一個 FxCop 項目,然后向其添加您要測試的程序集。在將該程序集添加到項目以后,就可以按 Analyze,FxCop 將分析該程序集。圖 6 中顯示了在該程序集中找到的錯誤和警告。
圖 6
FxCop 在我的程序集中找到了幾個問題。您可以雙擊某個錯誤以查看詳細信息,包括規則說明以及在哪里可以找到更多信息。(您可以做的一件有趣的事情是在框架程序集上運行 FxCop 并查看發生了什么事情。)
FxCop 可以幫助您創建更好的、更一致的代碼,但它無法補償低劣的應用程序設計或非常簡單拙劣的編程。FxCop 也不能替代對等代碼檢查,但是因為它可以在進行代碼檢查之前捕獲大量錯誤,所以您可以花費更多時間來解決嚴重的問題,而不必擔心命名約定。FxCop 由 Microsoft 開發,并且可以從 http://www.gotdotnet.com/team/fxcop 下載。
Lutz Roeder 的 .NET Reflector
下一個必不可少的工具稱為 .NET Reflector,它是一個類瀏覽器和反編譯器,可以分析程序集并向您展示它的所有秘密。.NET 框架向全世界引入了可用來分析任何基于 .NET 的代碼(無論它是單個類還是完整的程序集)的反射概念。反射還可以用來檢索有關特定程序集中包含的各種類、方法和屬性的信息。使用 .NET Reflector,您可以瀏覽程序集的類和方法,可以分析由這些類和方法生成的 Microsoft 中間語言 (MSIL),并且可以反編譯這些類和方法并查看 C# 或 Visual Basic ?.NET 中的等價類和方法。
為了演示 .NET Reflector 的工作方式,我將加載和分析前面已經顯示的 NUnitExample 程序集。圖 7 顯示了 .NET Reflector 中加載的該程序集。
圖 7 NUnitExample 程序集
在 .NET Reflector 內部,有各種可用來進一步分析該程序集的工具。要查看構成某個方法的 MSIL,請單擊該方法并從菜單中選擇 Disassembler。
除了能夠查看 MSIL 以外,您還可以通過選擇 Tools 菜單下的 Decompiler 來查看該方法的 C# 形式。通過在 Languages 菜單下更改您的選擇,您還可以查看該方法被反編譯到 Visual Basic .NET 或 Delphi 以后的形式。以下為 .NET Reflector 生成的代碼:
| public void HashtableAddTest() { Hashtable hashtable1; hashtable1 = new Hashtable(); hashtable1.Add("Key1", "Value1"); hashtable1.Add("Key2", "Value2"); Assert.AreEqual("Value1", hashtable1["Key1"], "Wrong object returned!"); Assert.AreEqual("Value2", hashtable1["Key2"], "Wrong object returned!"); }? |
| public void HashtableAddTest() { Hashtable ht = new Hashtable(); ht.Add("Key1", "Value1"); ht.Add("Key2", "Value2"); Assert.AreEqual("Value1", ht["Key1"], "Wrong object returned!"); Assert.AreEqual("Value2", ht["Key2"], "Wrong object returned!"); } ? |
雖然該示例是一種顯示實際代碼與反編譯代碼之間對比的好方法,但在我看來⒉淮?.NET Reflector 所具有的最佳用途 — 分析 .NET 框架程序集和方法。.NET 框架提供了許多執行類似操作的不同方法。例如,如果您需要從 XML 中讀取一組數據,則存在多種使用 XmlDocument、XPathNavigator 或 XmlReader 完成該工作的不同方法。通過使用 .NET Reflector,您可以查看 Microsoft 在編寫數據集的 ReadXml 方法時使用了什么,或者查看他們在從配置文件讀取數據時做了哪些工作。.NET Reflector 還是一個了解以下最佳實施策略的優秀方法:創建諸如 HttpHandlers 或配置處理程序之類的對象,因為您可以了解到 Microsoft 工作組實際上是如何在框架中生成這些對象的。
.NET Reflector 由 Lutz Roeder 編寫,并且可以從 http://www.aisto.com/roeder/dotnet 下載。
From:? http://www.godist.cn/blog/article.asp?id=396總結
以上是生活随笔為你收集整理的.Net开发人员应该下载的十种必备工具(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数字图像处理第三版中文版部分答案-冈萨雷
- 下一篇: VB2005.Net 环境下使用Jmai