.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开发人员应该下载的十种必备工具(二)相关推荐
- .Net开发人员应该下载的十种必备工具(三)
NDoc 编写代码文档资料几乎总是一项令人畏惧的任务.我所说的不是早期设计文档,甚至也不是更为详细的设计文档:我说的是记录类上的各个方法和属性.NDoc 工具能够使用反射来分析程序集,并使用从 C# ...
- .Net开发人员应该下载的十种必备工具(一)
·用于编写单元测试的 NUnit ·用于创建代码文档资料的 NDoc ·用于生成解决方案的 NAnt ·用于生成代码的 CodeSmith ·用于监视代码的 FxCop ·用于编译少量代码的 Snip ...
- [导入]每个开发人员现在应该下载的十种必备工具
每个开发人员现在应该下载的十种必备工具 文章来源:http://blog.csdn.net/yanlixin4csdn/archive/2004/07/22/48297.aspx 转载于:https: ...
- [MSDN]每个开发人员现在应该下载的十种必备工具
本文讨论: • 用于编写单元测试的 NUnit • 用于创建代码文档资料的 NDoc • 用于生成解决方案的 NAnt • 用于生成代码的 CodeSmith • 用于监视代码的 FxCop • 用于 ...
- 每个开发人员现在应该下载的十种必备工具
本文自发布以来已经增加了新信息.(摘自 msdn ) 本文讨论: • 用于编写单元测试的 NUnit • 用于创建代码文档资料的 NDoc • 用于生成解决方案的 NAnt • 用于生成代码的 Cod ...
- 每个[NET]开发人员现在应该下载的十种必备工具
http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.ms ...
- .NET开发不可错过的25款必备工具
.NET开发不可错过的25款必备工具 这些年来,我们的.NET开发团队不断在更新升级开发工具,这也提供了一个机会,让我们能对.NET系列的开发工具做出不断的评估和规范.以下是我 们总结出的一些.NET ...
- [网摘].NET 程序员十种必备工具-概述
从 MSDN 中看到这篇文章,觉得不错转了过来,对于我这样的.NET新手来说每个工具都是提高效率的好开始.将这十款软件的介绍重新格式化一下,方便以后查阅.以 ".NET 程序员十种必备工具& ...
- 开发人员该选择什么大数据工具提高工作效率?
开发人员该选择什么大数据工具提高工作效率? 海量数据使得数据分析工作变得繁重困难,开发人员选择合适的大数据工具来开发大数据系统成为新的挑战.因此开发人员要根据不同的数据处理方式对大数据工具进行分类. ...
最新文章
- 利用Powershell SSH-Session 工具管理 linux或网络设备
- android一个简单的异步AsyncTask下载数示例,简单下载(07)
- VirtualProtect VirtualLock VirtualUnlock
- 【VM单机虚拟化学习】之View 5.1新体验
- oracle技术之检查点及SCN深入研究
- button标签设置隐藏和显示_离职后我隐藏一张工作表,老板找了一天没找到
- linux下java命令行参数_Java调用Linux命令行
- mysql sql使用_MySql简单sql使用
- Linux Rsync服务详解(二)——Rsync服务实战
- 电脑绣花制版软件评比(上)
- .NET的RulesEngine(规则引擎)使用
- Excel代替matplotlib画散点图 拟合曲线
- 海马体记忆训练:让你拥有超常记忆力
- 数据分析-深度学习Day5
- excel文件导入hive乱码_hive 从Excel中导入数据
- catia制作物料明细_一种基于CATIA的国标标准物料清单的生成方法与流程
- PT2262/2272遥控编解码集成电路
- SATA3.0中FIS的八种类型
- 获取bing壁纸php,php获取bing每日壁纸的示例
- 20155214曾士轩 2016-2017-2 《Java程序设计》第1周学习总结
热门文章
- System.Data.SQLite(SQLite ADO.NET 2.0的提供程序,已经包含Sqlite引擎)
- 面向数据科学家的实用统计学_数据科学家必知的统计数据
- github gists 101使代码共享漂亮
- 理解ConstraintLayout 对性能的好处
- 直方图绘制与直方图均衡化实现
- leetcode 1128. 等价多米诺骨牌对的数量
- leetcode 328. 奇偶链表(双指针)
- typescript 使用_如何使用TypeScript轻松修改Minecraft
- udacity开源的数据_评论:Udacity数据分析师纳米学位计划
- 飞机上的氧气面罩有什么用_第2部分—另一个面罩检测器……(