单元测试工具及资源推荐
 

2009-06-18 来源:网络

 

本文将简单介绍一下如下几种单元测试工具以及推荐一些学习资源。

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()

{

ClassA ca = new ClassA();

int expected = 3 int result = ca.GetResult();

Assert.AreEqual(expected,result);

}}

NUnit虽然在使用上非常简单,赢得了一部分用户,甚至于微软在企业库的源码中也提供了使用NUnit测试的版本,但是NUnit让我最不爽的地方是没有提供 Visual Studio IDE插件,这样如果做单元测试,会发现自己每天忙于奔波于IDE和NUnit GUI之间,不停的在切换窗口;还有一点NUnit虽然跟JUnit是兄弟,但是它的威望和能力相较Junit就差远了,尤其是扩展能力,后面我会介绍到一个NUnit的WinForm插件。

学习资源

NUnit的官方文档

个人认为,NUnit的难点在于测试用例的编写上,而不是工具本身的使用。

官方主页:http://www.nunit.org/

二.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()

{

ClassA ca = new ClassA();

int expected = 3 int result = ca.GetResult();

Assert.AreEqual(expected,result);

}}

它所有的操作都是通过IDE中的右键菜单完成。

由于跟IDE的集成,可以使我们很快的定位到出错的代码行。

由于TestDriven.Net的使用非常简单,所以目前基本没有什么中文文章介绍,大家可以参考一下官方网站上的QuickStart。 三.NunitForms

NUnitForms从 命名上看,就知道它跟NUnit有关,没错,它是NUnit的一个WinFrom的扩展。它为Windows Forms应用程序提供单元测试和压力测试,可以非常容易的用它为你的Windows Forms类进行自动化测试,它提供了一个Recorder Application,来记录你的操作。我们编写类似于如下代码片断的测试代码:

ButtonTester button = new ButtonTester(\"buttonName\", \"formName\");

ControlTester textBox = new ControlTester(\"nameOfSomeTextBox\");

Assertion.AssertEquals(\"defaultText\", textBox[\"Text\"];

textBox[\"text\"] = \"newText\"

或者类似于这样的代码进行操作记录:

//records button.Click() public void Click(object sender, EventArgs args){

listener.FireEvent(TesterType, sender, \"Click\");

}//records: comboBox.Enter(\"text\"); public void TextChanged(object sender, System.EventArgs e){

listener.FireEvent(TesterType, sender, \"Enter\", ((ComboBox)sender).Text);

}//records: comboBox.Select(3); //text of item 3 public void SelectedIndexChanged(object sender, System.EventArgs e){

EventAction action = new EventAction(\"Select\", ((ComboBox)sender).SelectedIndex);

action.Comment = ((ComboBox)sender).Text;

listener.FireEvent(TesterType, sender, action);

}

对于NUnitForms,它还有一个兄弟工具叫NUnitASP,

学习资源

对于NUnitForms,仍然是没有发现有好的中文资源,大家可以参考官方文档。

四.NUnitAsp

NUnitAsp可以说是NUnitForms的兄弟,它也是一个NUnit的扩展,用来自动测试ASP.NET页面。虽然NunitAsp可以完成一些ASP.NET页面的自动化测试工作,但是在编写测试用例的时候,如果界面上的元素比较多,编写起来会非常的麻烦,这也是为什么NunitAsp一直处于大紫不红的原因。它可以编写如下代码片断的测试代码: [Page]

public void TestLayout(){

TextBoxTester name = new TextBoxTester(\"name\", CurrentWebForm);

TextBoxTester comments = new TextBoxTester(\"comments\", CurrentWebForm);

ButtonTester save = new ButtonTester(\"save\", CurrentWebForm);

DataGridTester book = 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(){

TextBoxTester name = new TextBoxTester(\"name\", CurrentWebForm);

TextBoxTester comments = new TextBoxTester(\"comments\", CurrentWebForm);

ButtonTester save = new ButtonTester(\"save\", CurrentWebForm);

DataGridTester book = new DataGridTester(\"book\", CurrentWebForm);

Browser.GetPage(\"http://localhost/GuestBook/GuestBook.aspx\");

name.Text = \"Dr. Seuss\" comments.Text = \"One Guest, Two Guest! Guest Book, Best Book!\" save.Click();

}

学习资源

跟自己的兄弟NUnitForms一样,仍然没有好的中文文档,有兴趣的朋友可以参考‘NUnitAsp的官方文档,相对来说还是比较全的,有很多的教程。

总结

对于单元测试工具,就简单的介绍这么多,我个人还是推荐使用TestDriven.Net的个人版,至于后面两个NUnit的扩展,大家可以参考一下,在实际开发中用它们来测试会很麻烦,至少我目前不敢去做这个尝试。还有一个非常值得推荐的单元测试工具Mbunit,有兴趣的朋友可以关注一下,我对它了解并不多。

评论:

页面测试,可以关注一下 watiN,他可控制到 dialog/frame/js的alert/confirm 的测试。

http://watin.sourceforge.net/

单元测试的部份,我们是用 NUnitLite。

http://www.codeplex.com/NUnitLite

功能少nunit很多-_-,但他可以测试 web site project 里app_code里的cs。

符合工作的需求,也可参考看看。

对于Mobile的单元测试工具,恐怕很难找,因为netcf对于反射支持有限,而像NUnit这样的工具也用到了反射。最典型的例子就是NDoc,这个对netcf有的时候就爱莫能助了。

ReSharper UnitRun

\"is a free add-in for Microsoft Visual Studio 2005 that allows you to automatically run and profile unit tests. This user-friendly tool detects test fixtures of the supported unit testing frameworks and lets you run or profile them right from the code editor or from Visual Studio\'s Solution Explorer. \"

免费但不是开源的...

http://www.jetbrains.com/unitrun/

VS2007 将支持Mobile 系统的 unit test, 请大家关注。

另外,VS2005 database professsional 版本已经发布,支持SQL的单元测试,请大家试用。


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织