说到单元测试,大家首
先会想到NUnit
,但对于NUnit
来说
还存在着一些不足,比如说它不能够与VS.NET IDE
集成、扩展能力比较差等,除此之外我们还
需要一些自动化的测试工具,本文将简单介绍一下如下几种单元测试工具以及推荐一些学习资源。
1
.NUnit
2
.TestDriven.Net
3
.NUnitForms
4
.NUnitAsp
一.NUnit
提起大名鼎鼎的NUnit
,我想没有几个不知道吧?NUnit
是一个
专门针对于.NET
的单元测试框架。在这之前有针对Java
的JUnit,
针对C++
的CPPUnit
,它们都是属于xUnit
家族。 NUnit
是xUnit
家族种的第4
个主打产品,
完全由C#
语言来编写,
并且编写时充分利用了许多.NET
的特性,
比如反射,
客户属性等等,最重要的一点是它适合于所有.NET
语
言。
编写一段简单的单元测
试代码:
[TestFixture]
public
class
TestDatabase
{
[Test]
public
void
TestWithDebugger()
{
ClassAca
=
new
ClassA();
int
expected
=
3
;
int
result
=
ca.GetResult();
Assert.AreEqual(expected,result);
}
}
NUnit的使用非常简单,运行
后如下图所示:
NUnit
虽然在使用上非常简单,赢得了一部分用户,甚至于微软在企业库的源码中也提供了使用NUnit
测试的版本,但是NUnit
让我最不爽的地方
是没有提供Visual Studio IDE
插件,这样如果做单元测试,会发现自己每天忙于奔波
于IDE
和NUnit GUI
之间,不停的
在切换窗口;还有一点NUnit
虽然跟JUnit
是
兄弟,但是它的威望和能力相较Junit
就差远了,尤其是扩展能力,后面我会介绍到一个NUnit
的WinForm
插件。
官方主页:http://www.nunit.org/
学习资源
1
.NUnit
的官方文档
2
.园子里LIVE
的NUnit详细使用方法
3
.Aero
的实践单元测试(3)-Using NUnit
个人认为,看以上两篇
中文资料足以学会NUnit
的使用,它的难点在于测试用例的编写上,而不是工具本身的使用。
二.TestDriven.Net
TestDriven.Net
列在开源项目介绍里面其实有些不太合适,因为它现在已经是一种商业化的工
具,只有个人版可以免费下载使用,个人认为在开发中个人版的功能已经足够了,之所以我要把它放在这里介绍,是因为它太优秀了。前面说的NUnit
,虽然使用非常简单,但是它不能与我们的.NET
开
发环境集成起来,而TestDriven.Net
就是这样一款以插件的形式集成在Visual Studio
中的单元测试工具,它的前身是NUnitAddIn
,
由Jamie Cansdale
大师开发,一开始作者只是想做一个NUnit
插件集成到Visual Studio
中,经
过多次版本更新,NUnitAddIn
在2004
年9
月底更名为TestDriven.NET
,并在当年
的12
月初发布了它的第一个Release
版
本,即TestDriven.NET 1.0
。在今年的10
月
底,终于迎来了TestDriven.NET 2.0
版本的发布,最新的2.0
版本集成了.NET Reflector
、NConver
、NConverExplorer
、TypeMock.NET
等,功能更加强大,我们还是使用前面的例子:
[TestFixture]
public
class
TestDatabase
{
[Test]
public
void
TestWithDebugger()
{
ClassAca
=
new
ClassA();
int
expected
=
3
;
int
result
=
ca.GetResult();
Assert.AreEqual(expected,result);
}
}
它所有的操作都是通过IDE
中
的右键菜单完成,如下图所示:
由于跟IDE
的集成,可以使我们很快的定位到出错的代码行:
官方主页:http://www.testdriven.net/
学习资源
由于TestDriven.Net
的使用非常简单,所以目前基本没有什么中文文章介绍,大家可以参考一下官方网站上
的QuickStart
以
及我在06
年12
月份《程序员》杂志上写的
一篇关于TestDriven.Net
的文章。
三.NunitForms
NUnitForms
从命名上看,就知道它跟NUnit
有关,没
错,它是NUnit
的一个WinFrom
的
扩展。它为Windows Forms
应用程序提供单元测试和压力测试,
可以非常容易的用它为你的Windows Forms
类
进行自动化测试,它提供了一个Recorder Application
,来记录你的操作。我们编
写类似于如下代码片断的测试代码:
ButtonTesterbutton
=
new
ButtonTester(
"
buttonName
"
,
"
formName
"
);
ControlTestertextBox
=
new
ControlTester(
"
nameOfSomeTextBox
"
);
Assertion.AssertEquals(
"
defaultText
"
,textBox[
"
Text
"
];
textBox[
"
text
"
]
=
"
newText
"
;
或者类似于这样的代码进行操作记录:
//
recordsbutton.Click()
public
void
Click(
object
sender,EventArgsargs)
{
listener.FireEvent(TesterType,sender,
"
Click
"
);
}
//
records:comboBox.Enter("text");
public
void
TextChanged(
object
sender,System.EventArgse)
{
listener.FireEvent(TesterType,sender,
"
Enter
"
,((ComboBox)sender).Text);
}
//
records:comboBox.Select(3);
//
textofitem3
public
void
SelectedIndexChanged(
object
sender,System.EventArgse)
{
EventActionaction
=
new
EventAction(
"
Select
"
,((ComboBox)sender).SelectedIndex);
action.Comment
=
((ComboBox)sender).Text;
listener.FireEvent(TesterType,sender,action);
}
对于NUnitForms
,它
还有一个兄弟工具叫NUnitASP
,
官方主页:http://nunitforms.sourceforge.net/
学习资源
对于NUnitForms
,仍然是没有发现有好的中文资源,大家可以参考官方文档
。
四.NUnitAsp
NUnitAsp
可以说是NUnitForms
的兄弟,它也是一
个NUnit
的扩展,用来自动测试ASP.NET
页
面。虽然NunitAsp
可以完成一些ASP.NET
页
面的自动化测试工作,但是在编写测试用例的时候,如果界面上的元素比较多,编写起来会非常的麻烦,这也是为什么NunitAsp
一
直处于大紫不红的原因。它可以编写如下代码片断的测试代码:
public
void
TestLayout()
{
TextBoxTestername
=
new
TextBoxTester(
"
name
"
,CurrentWebForm);
TextBoxTestercomments
=
new
TextBoxTester(
"
comments
"
,CurrentWebForm);
ButtonTestersave
=
new
ButtonTester(
"
save
"
,CurrentWebForm);
DataGridTesterbook
=
new
DataGridTester(
"
book
"
,CurrentWebForm);
Browser.GetPage(
"
http://localhost/GuestBook/GuestBook.aspx
"
);
AssertVisibility(name,
true
);
AssertVisibility(comments,
true
);
AssertVisibility(save,
true
);
AssertVisibility(book,
false
);
}
public
void
TestSave()
{
TextBoxTestername
=
new
TextBoxTester(
"
name
"
,CurrentWebForm);
TextBoxTestercomments
=
new
TextBoxTester(
"
comments
"
,CurrentWebForm);
ButtonTestersave
=
new
ButtonTester(
"
save
"
,CurrentWebForm);
DataGridTesterbook
=
new
DataGridTester(
"
book
"
,CurrentWebForm);
Browser.GetPage(
"
http://localhost/GuestBook/GuestBook.aspx
"
);
name.Text
=
"
Dr.Seuss
"
;
comments.Text
=
"
OneGuest,TwoGuest!GuestBook,BestBook!
"
;
save.Click();
}
官方主页:http://nunitasp.sourceforge.net/index.html
学习资源
跟自己的兄弟NUnitForms
一样,仍然没有好的中文文档,有兴趣的朋友可以参考‘NUnitAsp
的官方文档
,相对来说还是比较全
的,有很多的教程。
总结
对于单元测试工具,就
简单的介绍这么多,我个人还是推荐使用TestDriven.Net
的个人版,至于后面两个NUnit
的扩展,大家可以参考一下,在实际开发中用它们来测试会很麻烦,至少我目前不敢去做这个尝试。还有
一个非常值得推荐的单元测试工具Mbunit
,有兴趣的朋友可以关注一下,我对它了解并不多。
本来想在文章中再介绍
一下开源的Mock
框架的,感觉太多了,只好单独放一篇文章来介绍了。
分享到:
相关推荐
### 23个.NET开源项目:深度解析与应用价值 ...总体而言,这23个.NET开源项目覆盖了从测试、数据访问、架构设计到工具库的各个方面,为.NET开发者提供了丰富的资源和工具,极大地促进了.NET生态的繁荣和发展。
ASP.NET MVC是微软开发的一个开源Web应用程序框架,用于构建可维护和测试的动态网站。它结合了ASP.NET Web Forms的事件驱动模型和基于HTTP的RESTful编程模型,提供了更清晰的代码结构,使得开发者能够更好地控制HTML...
ASP.NET开源项目是微软开发的一款基于.NET Framework的Web应用程序开发框架,它允许开发者使用C#或VB.NET等语言创建动态网站、web应用和web服务。在这个"ASP.NET开源项目3"中,我们可以看到四个不同的子项目,分别...
总的来说,通过深入探究BugNet这个开源项目,开发者不仅可以掌握C#和ASP.NET MVC的实际应用,还能了解到软件开发中的缺陷管理流程,以及项目构建、部署和维护的相关知识。对于想要提升.Net技术栈的开发者来说,这是...
IKVM是一种开源项目,全称为"IKVM.NET",它实现了Java虚拟机(JVM)并将其集成到.NET Framework中,使得.NET开发者可以利用Java库和程序在C#等.NET语言中运行。这个资源包“ikvm资源及测试包”显然是针对想要在C#...
本压缩包包含的是一个完整的ASP.NET项目源代码集合,提供了十个不同的项目示例,这对于学习和理解ASP.NET的工作原理、开发流程以及最佳实践来说,是一个宝贵的资源。 1. **ASP.NET基础**:ASP.NET是.NET框架的一...
.NET开源意味着.NET框架的部分或全部源代码已公开,允许社区成员进行查看、学习、贡献和分发。这促进了.NET技术的持续发展,鼓励创新和协作。例如,ASP.NET MVC、Entity Framework等项目现已成为开源项目,托管在...
### .NET 开源项目概述 .NET 是一个由微软开发的应用程序框架,旨在为开发者提供一个统一的编程模型、语言和库。随着 .NET 技术的发展,越来越多的开源项目涌现出来,这些项目不仅有助于提高软件开发效率,还能帮助...
在ASP.NET开源论坛中,开发者可以利用ASP.NET的MVC(Model-View-Controller)模式来构建清晰的、可测试的代码结构,同时利用ASP.NET的内置服务如身份验证、缓存管理和状态管理,以提升论坛的用户体验和性能。...
这可能是一个包含 .NET CLI 项目的源代码仓库,其中可能有项目文档、示例代码、单元测试以及构建脚本等。 综合以上信息,我们可以总结出以下知识点: 1. **.NET CLI**:是 .NET 开发的重要组成部分,提供命令行...
**深入挖掘ASP.NET 2.0系列课程(5): 全面优化ASP.NET 2.0** 本课程是关于ASP.NET 2.0技术的深度探索,特别关注于性能优化这一重要主题。ASP.NET 2.0是微软推出的一个强大的Web应用程序开发框架,它为开发者提供了...
`最新Asp.Net源码下载.url`则可能是一个链接,指向更多ASP.NET相关的资源或更新。 `Provider`目录可能包含了自定义的身份验证、授权或其他服务提供者,这是ASP.NET MVC中扩展功能的一种方式。`EFTracingProvider`这...
6. **测试(Testing)**:由于MVC架构的分层特性,ASP.NET MVC项目易于编写单元测试和集成测试。开发者可以使用如NUnit、Moq或xUnit等测试框架来确保代码质量。 7. **Oxite项目**:在提供的文件列表中,"Oxite"可能...
**博客引擎 .NET 开源软件详解** BlogEngine .NET 是一款基于 ASP.NET 技术的开源博客系统,它以其强大的功能、优秀的代码质量和良好的架构设计而受到开发者的喜爱。这款软件不仅提供了完整的博客管理功能,同时也...
13. **社区支持和资源**:由于是开源项目,ASP.NET拥有庞大的开发者社区,丰富的文档、教程和第三方库,使得学习和解决问题变得容易。 HSS文件可能是这个压缩包的主文件,但没有详细信息无法进一步解读。通常,HSS...
无论是用来搭建个人博客,还是作为学习ASP.NET开发的实践项目,都是非常有价值的资源。开发者可以通过深入研究源代码,提高自己的编程技能,同时也可以根据需求进行定制,打造独一无二的在线表达平台。
8. **持续学习和社区资源**:书中可能引导读者了解.NET社区,如Stack Overflow、GitHub上的开源项目,以及.NET Foundation等相关资源,以便于持续学习和参与开源项目。 通过阅读《精通.NET企业项目开发》(英文版),...
9. **单元测试与持续集成**:开源项目通常鼓励单元测试,以保证代码质量。结合持续集成工具如Jenkins或TeamCity,可以自动化构建、测试和部署过程。 综上所述,“基于asp.net mvc的开源网站管理系统”是一个功能...
ASP.NET开源多用户博客系统是一种基于微软的ASP.NET技术构建的网络应用,它允许多个用户在同一个平台上创建和管理自己的博客。源代码的提供对于开发者来说是一个宝贵的资源,可以用于学习、研究或作为基础来开发自己...
标题中的“两个在线编辑器及在.NET下的实现全代码”暗示了我们将探讨的是两种用于Web开发的文本编辑器,它们可以在.NET框架下运行,并且提供了完整的源代码供开发者研究和使用。在线编辑器通常用于网站内容管理系统...