做网站厦门,中国做投资的网站,网站提交 入口,wordpress 企业整站源码NUnit NUnit 是为 .NET 框架生成的开放源代码单元测试框架。NUnit 使您可以用您喜欢的语言编写测试#xff0c;从而测试应用程序的特定功能。当您首次编写代码时#xff0c;单元测试是一种测试代码功能的很好方法#xff0c;它还提供了一种对应用程序进行回归测试的方法。NU…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 项目然后向其添加您要测试的程序集。在将该程序集添加到项目以后就可以按 AnalyzeFxCop 将分析该程序集。图 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?id396