资源描述
NUnit+NUnitAsp使用手册
内容提纲:
1、NUnit
1.1、NUnit概述
1.2、NUnit的使用
1.2.1、安装
1.2.2、测试实现
1.2.3、图形化界面的使用(nunit-gui.exe)
1.2.4、命令行界面的使用(nunit-console)
2、NUnitAsp
2.1、NUnitAsp 概述
2.2、NUnitAsp的使用
2.2.1、安装
2.2.2、使用
参考资料
1、NUnit
返回页首
--------------------------------------------------------------------------------
1.1、NUnit概述
NUnit是一个用来专门针对.Net应用程序进行单元测试的工具,利用它我们可以很方便的编写一个单元测试代码,方便我们进行单元测试。
NUnit最新的版本是2.1版,大家可以到站点http://www.nunit.org/ 去下载。
使用NUnit可以通过两种方式:
1.图形化界面 nunit-gui.exe
2.命令行方式 nunit-console.exe
返回页首
--------------------------------------------------------------------------------
1.2、NUnit的使用
返回页首
--------------------------------------------------------------------------------
1.2.1、安装
NUnit默认是安装在C:\Program Files\Nunit V2.1,安装成功后会在桌面出现一个快捷方式。我们可以通过运行安装包自带的例子(nunit.tests.dll.)来验证安装是否成功,下面就是安装成功后出现的界面:
返回页首
--------------------------------------------------------------------------------
1.2.2、测试实现
1.测试工程的建立
a.新建一个.Net类库,添加对nunit.framework.dll的引用,给类加上一个“TestFixture”特性,表明这个类包含测试代码;
b.对具体的测试方法添加一个“Test”特性,表明这是一个测试方法,并且测试方法的返回值必须为void并且不能带有参数
c.添加对要测试代码(dll)的引用
namespace bank
{
using NUnit.Framework;
[TestFixture]
public class AccountTest
{
[Test]
public void TransferFunds()
{
}
}
}
2.Assert类的作用
Assert类用在测试方法中,它定义了一组方法用于检查给定的条件,Nunit 可以通过这个类提供的方法。
来判断期望的测试结果有没有出现。常用的包括:
a.AreEqual(object expected ,object actual):判断两个对象是否相等,如果不相等异常“Assertion Failed Error”就会抛出
Assert.AreEqual(250.00F,destination.Balance);
Assert.AreEqual(100.00F,source.Balance);
b.IsTrue(bool condition):判断条件是否为真,如果为假则异常“AssertException”就会抛出
Assert.IsTrue(intI>5);
注意:Assert类的其他方法的使用见Nunit自带的帮助文档
3.异常(Exception)的处理
用在测试方法中。如果我们希望检测指定的异常是否会抛出,我们可以使用ExpectedException特性: Expected Exception (System.Type exceptionType)。例如我们希望测试方法抛出一个Insufficient Funds Exception 异常我们可以写成:
[ExpectedException(typeof(insufficientFundsException))]
public void TransferWithInsufficientFunds()
如果我们希望忽略掉某个异常,我们可以使用Ignore特性:Ignore(string reason)
例如我们希望忽略掉InsufficientFundsException异常就可以写成:
[Test, Ignore("Need to decide how to implement transaction management in the application")]
public void TransferWithInsufficientFundsAtomicity()
{
try
{
source.TransferFunds(destination, 300.00F);
}
catch(InsufficientFundsException expected)
{
Assert.AreEqual(200.00F,source.Balance);
Assert.AreEqual(150.00F,destination.Balance);
}
}
4.TestFixtureSetUp特性
用在测试的方法上,表示这个方法会在所有测试方法运行前运行,在整个测试类中只运行一次。一般用来为测试建立些初始数据:
[TestFixtureSetUp]
public void RunBeforeAllMethods()
{
}
5.SetUp特性
用在测试方法上,表示这个方法会在每个测试方法运行前运行,在整个测试类中运行多次,有多少个测试方法就运行多少次。一般用来为测试建立些初始数据:
[SetUp]
public void RunBeforeEachMethod()
{
}
6.TestFixtureTearDown特性
用在测试的方法上,表示这个方法会在所有测试方法运行后运行,在整个测试类中只运行一次
7.TearDown特性
用在测试方法上,表示这个方法会在每个测试方法运行后运行,在整个测试类中运行多次,有多少个测试方法就运行多少次。
下面是一个具体的例子:
[TestFixture]
public class TestFixtureSetUpAndTearDownTest
{
[TestFixtureSetUp]
public void RunBeforeAllTests()
{
Console.WriteLine( “TestFixtureSetUp” );
}
[TestFixtureTearDown]
public void RunAfterAllTests()
{
Console.WriteLine( “TestFixtureTearDown” );
}
[SetUp]
public void RunBeforeEachTest()
{
Console.WriteLine( “SetUp” );
}
[TearDown]
public void RunAfterEachTest()
{
Console.WriteLine( “TearDown” );
}
[Test]
public void Test1()
{
Console.WriteLine( “Test1” );
}
[Test]
public void Test2()
{
Console.WriteLine( “Test2” );
}
}
运行TestFixtureSetUpAndTearDownTest类得到的输出是:
TestFixtureSetUp
SetUp
Test1
TearDown
SetUp
Test2
TearDown
TestFixtureTearDown
如果只运行TestFixtureSetUpAndTearDownTest类中的Test2方法,得到的输出是:
TestFixtureSetUp
SetUp
Test2
TearDown
TestFixtureTearDown
8.Suite 特性
它的主要功能是将所有的测试代码类集合在一起,做为一个组来批量执行。
在旧版本中是做为Suite属性(Property)来实现的.现在已经被替代为Suite特性(attribute)了,在NUnit2.1.4版本中由于有了动态建立对象的机制,一般用的比较少了。
Suite特性只能在命令行界面 (nunit-console.exe) 中使用
下面是一个代码示例:
namespace NUnit.Tests
{
using System;
using NUnit.Framework;
using NUnit.Core;
public class AllTests
{
[Suite]
public static TestSuite Suite
{
get
{
TestSuite suite = new TestSuite("All Tests");
suite.Add(new OneTestCase());
suite.Add(new Assemblies.AssemblyTests());
suite.Add(new AssertionTest());
return suite;
}
}
}
}
9.运行
a.编译测试类,生成DLL文件;
b.打开Nunit界面,将建立的测试类(DLL文件)导入到Nunit中;
c.选择要运行的测试方法,单击“RUN”按钮。如果运行成功(根据Assert或ExpectedException的设置),状态条会变成绿色。
否则为红色
注意:Nunit的其他方法的使用见Nunit自带的帮助文档
返回页首
--------------------------------------------------------------------------------
1.2.3、图形化界面的使用(nunit-gui.exe)
NUnit的图形化界面包括五个菜单选项:File,View,Project,Tools,Help
1.File菜单
New Project选项
关闭已经打开的工程(如果打开的工程有改变会提示用户保存),显示FileSave对话框提示用户输入新工程的名称及选择新工程保存的路径。
Open选项
关闭已经打开的工程(如果打开的工程有改变会提示用户保存),显示FileOpen对话框提示用户选择要打开的程序集,测试工程或Visual Studio工程的名称和路径。
Close选项
关闭已经打开的工程(如果打开的工程有改变会提示用户保存)。
Save选项
保存目前打开的工程。如果工程是第一次保存,会显示Save对话框提示用户保存。
Save As选项
显示FileSave对话框让用户指定要保存的工程的名称和路径。
Reload选项
重新载入当前被载入的工程(用当前工程中所有程序集的最新版本。)
Recent Files 选项
显示最近打开过的文件列表,这样用户就可以很方便的从里面选择一个要打开的文件
Exit选项。
关闭并退出NUNIT。如果测试正在运行,用户可以选择放弃退出或仍然退出。如果打开的工程被改变了,用户可以先保存工程。
2.View菜单
Expand选项
展开界面左边被选择的树的节点。
Collapse选项
折叠界面左边被选择的树的节点。
Expand All选项
展开界面左边树的所有节点。
Collapse All选项
折叠界面左边树的所有节点。
Expand Fixtures
展开界面左边的树中有Fixture特性的节点。
Collapse All选项
折叠界面左边的树中有Fixture特性的节点。
Properties 选项
显示当前被选择的内容的属性对话框。
3.Project菜单
Configurations子菜单
Add 选项
打开Add Configuration对话框,在对话框里可以建立新的配置文件或者替换已有的配置文件。
Edit选项
打开Configuration Editor(编辑器)。
Add Assembly选项
显示FileOpen对话框,提示用户选择一个要增加到当前打开的工程的配置文件里的程序集。
Add VS Project选项
当“Visual Studio Support“选项被选中的时候才出现这个选项。
显示FileOpen对话框提示用户选择要加入到当前被打开的工程中的Visual Studio工程文件。
Edit 选项
打开一个Project Editor对话框。
4.Tool菜单
Save Results as XML选项。
打开FileSave对话框,将运行的结果保存到一个XML文件中。
Options选项
显示Options Dialog(Options对话框)。
5.Help菜单
Help选项
目前还不可用。
About NUnit
显示当前使用的NUnit的版本信息和到Nunit.org站点的链接。
Context菜单(上下文菜单)
当右击界面左边树中的节点是会出现上下文菜单。
1.Run选项
运行要测试的节点。如果正在运行则选项的状态为“不可用”(Disabled)。
2.Expand选项
展开被选择的树的节点。如果节点已经被展开或没有子节点则该选项不可见。
3.Collapse选项
折叠被选择的树的节点。如果节点已经被折叠或没有子节点则该选项不可见。
4.Properties选项
显示被选择节点的Test Properties对话框。
Options Dialog(Options对话框)
这个对话框在Tools|Options菜单下,在这里用户可以设定NUnit的一些系统配置。
Recent Files:设定放在“最近使用的文件列表”中的文件的数目
Load most recent project at startup:如果此选项被勾中,Nunit的图形化界面会自动载入最近被打开的那个工程文件(当打开Nunit的图形化界面是指定了要打开的文件名称或用了“/noload”参数时除外)。
Initial display on load 设定当载入了要测试的文件后界面左边的树的节点的展开/折叠情况:
Expand-展开所有的节点
Collapse-折叠所有的节点
Hide Test-展开所有没有“Fixtures”特性的节点
Auto-自动根据树所占用的界面空间的情况来决定是否展开或折叠
Assembly Reload选项:
如果“Reload before each test run”被选中,无论测试程序集有没有发生改变,只要“Run”按钮被点击了,测试程序都被重新载入到NUnit中。
如果“Reload when test assembly changes”被选中了,如果测试程序集发生了改变,Nunit就会自动重新载入测试程序集。这个选项对于Windows98和Windows Me操作系统是无效的。
如果“Clear results when tests change”被选中了,当重新载入测试程序集(无论是手工的还是自动的方式)的时候会重新初始化树中的节点(变成灰色)。如果没有选中,当测试结果没有变化的时候测试结果信息会保存下来。
Visual Studio 选项:
如果“Enable Visual Studio Support ”被选中了,用户就可以在Nunit中打开Visual Studio 工程和解决方案,也可以增加Visual Studio工程到正在使用的测试工程中。
Configuration Editor(配置编辑器)
Configuration Editor(配置编辑器)通过点击Project | Configuration |Edit 来打开,在编辑器里可以进行如下几个操作:
1.Remove 按钮
删除被选中的配置。如果被选中的配置的状态是“Active(激活)”,那么被删除后列表中下一个配置的状态将为“Acitve(激活)”
2.Rename按钮
重新命名选中的配置
3.Add 按钮
增加一个新的配置。在弹出的“Add Configuration”对话框里可以选择已存在的配置模板作为新的配置。
4.Make Active 按钮
激活被选中的配置
5.Cloase按钮
退出配置编辑器
Test Properties 对话框
这个对话框可以通过单击菜单View | Properties 打开,也可以在右键菜单中选择Properties选项打开。它是用来显示测试或测试结果(如果测试已经运行了)的信息。右上角针状的按钮是用来将对话框始终保持打开的状态。
Result 页
只有当测试运行了后Result页才会显示出来。它是用来显示测试的结果信息(成功或失败)。
Success/Failure
表明测试是成功了还是失败了
Time
运行测试所花的时间(单位为秒)
Message
显示测试失败后的错误信息. 鼠标移上去会显示全部的信息
Stack
如果测试失败了,这里会显示错误的实际位置(在程序集中的)。鼠标移上去会显示全部的信息。
Project Editor(工程编辑器)
Project Editor(工程编辑器)可以通过单击 Project | Edit 菜单打开。在编辑器里可以新建或修改Nunit的测试工程。值得注意的是,只要载入了要测试的东西(程序集或实际的Visual Studio工程),Nunit就会自动建立一个Nunit的测试工程。
在编辑器里我们可以很方便的改变和保存测试工程的设置。
编辑器分为三个部分:Common Area(公共区) 和两个Tab页,如图:
Common Area(公共区)包括:
1.显示工程全名的标签(Project Path)
2.一个用来选择配置的下拉框
3.一个用来编辑配置的按钮(会打开Configuration Editor对话框)
General Tab页
在这里可以修改当前被选中的配置的一些属性.所有的配置属性会被保存在Nunit工程文件中(作为<Config> XML节点的属性保存)
1.ApplcationBase
默认的值是工程文件所在的路径.用户可以指定另外一个路径。
2.Configuration File Name
配置文件的名称(默认是将工程文件名的.Nunit后缀改为.Config.做为配置文件的名称)。用户可以在这里修改配置文件的名称。
3.PrivateBinPath
默认的设置是和在Assemblies Tab页设置的程序集(Assembly)的路径是一样的。如果用户有其他方式的需要。可以通过”specified manually”或”None-or specified in the configuration file.”来获得。
Results Tab页
Results Tab页列出了测试工程所包含的程序集的列表。Checkbox框用来表明那些包含测试的程序集。通过选中要测试的程序集用户可以自动的生成”PrivateBinPath”.NUNIT的图形化界面不会载入那些没有选中的程序集(Checkbox框没有选中),但是会用他们的路径来产生”PrivateBinPath”并且会跟踪他们是否发生了改变(如果自动载入测试的功能被选中了)。
注意:尽管对话框中显示的是程序集的绝对路径,但实际上在Nunit的工程文件里保存的是相对路径,这样就可以和容易的将Nunit工程移动到另外一个位置而步会影响到里面包含的程序集文件。
1.Add Assembly按钮
打开一个对话框让用户添加一个程序集(Assembly)。
2.Add VS Project 按钮
打开一个对话框让用户添加一个Visual Studio工程。
3.Edit Path 按钮
打开一个对话框让用户改变选中的程序集的路径。
4.Remove Assembly按钮
删除选中的程序集。
返回页首
--------------------------------------------------------------------------------
1.2.4、命令行界面的使用(nunit-console)
以命令行的方式使用NUnit(通过nunit-console.exe)具有一些图形化界面所没有的功能。
命令行的方式必须指定要测试的程序集或工程文件的名称。
命令行的方式用XML格式的文件来保存测试的输出结果(默认的名称是TestResult.xml,存放在当前的工作目录下)。
1.指定要运行的程序集
命令行方式必须指定一个要运行的程序集或工程。
运行nunit.tests.dll可以写成:
nunit-console.exe nunit.tests.dll
运行包含nunit.tests.dll的Visual Studio工程可以写成:
nunit-console.exe nunit.tests.csproj
运行包含nunit.tests.dll的Nunit测试工程可以写成:
nunit-console.exe nunit.tests.nunit
2.指定要运行的程序集和具体的方法(Fixture)
要运行程序集中具体的方法需要给出它的全名。例如要运行nunit.test.dll 中的Test类中的AssertionTest方法。可以写成:
nunit-console /fixture:NUnit.Tests.AssertionTests nunit.tests.dll
3.指定XMl文件的名称
前面我们说了,命令行方式产生的输出是XML格式的文件,并且有默认的名称。如果我们想将默认的文件名改为console-test.xml,可以写成:
nunit-console /assembly:nunit.tests.dll /xml:console-test.xml
4.指定转换文件
命令行方式可以通过XSLT文件将XML格式的输出文件转换成其他格式的文件。
例如我们想用myTransform.xslt文件来进行转换就可以写成:
nunit-console nunit.tests.dll /transform:myTransform.xslt
5.指定要用的配置
当运行Nunit工程或Visual Studio工程的时候,默认的“Debug”配置会被自动载入。
可以通过/config开关来指定要用的配置。例如我们想用Release配置来运行nunit.tests.dll 就可以写成:
Nunit-console.exe nunit.tests.csproj /config:Release
6.指定多个程序集
可以同时运行多个程序集.例如要同时运行assembly1.dll,assembly2.dll 和assembly3.dll 就可以写成:
nunit-console.exe assembly1.dll assembly2.dll assembly3.dll
7.其他的开关选项
/wait :需要用户输入才能退出Nunit
/xmlconsole :在控制台中显示XML格式的输出
返回页首
--------------------------------------------------------------------------------
2、NUnitAsp
返回页首
--------------------------------------------------------------------------------
2.1、NUnitAsp 概述
NUnitAsp是一个专门用来对Asp.Net页面进行单元测试的工具,它只能测试服务端的代码逻辑,不能测试JavaScript和其他客户端代码
它是Nunit的扩展,具备NUnit的所有功能。
最新的版本是1.4.1版,需要NUnit2.1版的支持(我们介绍的就是1.4.1版本)。
返回页首
--------------------------------------------------------------------------------
2.2、NUnitAsp的使用
返回页首
--------------------------------------------------------------------------------
2.2.1、安装
安装NUnitAsp非常简单,需要以下两步就可以了
1)从站点下载并解压,默认式安装在C:\Program Files\NunitAsp目录下
2)安装NUnit2.4.1版本
返回页首
--------------------------------------------------------------------------------
2.2.2、使用
使用NUnitAsp的测试程序由三部分组成:
a.用来分析Asp.Net页面的各种Tester对象的实例;
b.通过Browse对象从Web服务器载入要分析的页面;
c.用Assert类来进行测试(做关于各种Tester对象的断言)。
1.测试工程的建立
a.新建个.Net类库,添加对NunitAsp.dll 和nunit.framework.dll的引用;
b.添加对命名空间NUnit.Extensions.Asp和NUnit.Extensions.Asp.AspTester的引用;
c.将类的基类设为WebFormTestCase
using System;
using NUnit.Extensions.Asp;
using NUnit.Extensions.Asp.AspTester;
namespace GuestBookTests
{
{
public class GuestBookTest : WebFormTestCase
{
public void TestNothing()
}
}
}
2.WebFormTestCase类
所有的测试程序都要求继承WebFormTestCase类,它提供了很多有用的属性和方法:
A.Browser属性
用来载入要测试的Asp.Net页面(通过GetPage方法)
它是.Net 中HttpClient类型的对象
public void test()
{
Browser.GetPage(“http://localhost/example/example.aspx”);
}
B.CurrentWebForm属性
表示当前的WebForm对象,一般用在实例化Tester对象的时候
C.SetUp和TearDown方法
用来为测试程序做数据准备和数据删除的工作,运行在每个测试方法的开始和结束,类似与Nunit的SetUp和TearDown特性,测试程序必须要重写这两个方法才能实现相应的功能
protected override void SetUp()
{
base.SetUp();
}
protected override void TearDown()
{
base.TearDown();
}
3.Tester对象
Tester对象是用来管理要测试的Asp.Net页面中的Asp.Net控件的,它的实例具有相应的控件所有的属性和方法。实例化这个对象需要两个参数:控件的ID和控件所在的容器(页面或控件)。例如我们要测试页面中Textbox控件的内容,就可以写成:
public void test()
{
TextBoxTester objTester=new TextBoxTester("txtName",CurrentWebForm);
string str=objTester.Text;
Browser.GetPage("http://localhost/example/example.aspx");
}
其他的控件依次类推。
注意:其他Tester对象的使用方法见NunitAsp自带的帮助文档。
4.WebAssertion类的使用
这个类的很多方法都是用来做判断(断言的) ,例如页面中控件是否显示了,控件的内容是否是预定的值等等,它是从Nunit中的Assertion类继承来的。
a.AssertEquals方法
方法的签名是:AssertEquals(string errormessage,string ExpectedValue,string ActualValue)
断言两个字符对象是相等的。不等就抛出错误字符串(errorMesage)
public void test()
{
TextBoxTester objTester=new
TextBoxTester("txtName",CurrentWebForm);
string str=objTester.Text;
Browser.GetPage("http://localhost/example/example.aspx");
WebAssertion.AssertEquals(“textbox’s value is error”
,”ExpectedValue”,objTester);
}
b.AssertVisibility方法
方法的签名是: AssertVisibility(Tester对象,bool ExpectedVisibility)
用来断言页面中某个控件是否显示出来了。
public void test()
{
TextBoxTester objTester=new
TextBoxTester("txtName",CurrentWebForm);
string str=objTester.Text;
Browser.GetPage("http://localhost/example/example.aspx");
WebAssertion.AssertVisibility(objTester,true);
}
注意:WebAssertion类其他的使用方法见NunitAsp自带的帮助文档
5.自定义控件的测试(UserControl)
在Asp.Net中的Usercontrol是多个控件的集合体,如果我们要测试Usercontrol中的某个控件,我们需要:
a.先建立Usercontrol的Tester对象的实例;
展开阅读全文