在07年上半年,我才逐渐开始使用NUnit这个单元测试工具。之前一般使用WinForm或是Console程序来进行测试,只不过后来开发无界面的Windows服务程序时,才发现原来的测试方式有太大的问题。现在感觉使用专门的测试工具可能会更专业一些。
一、安装:
我们使用的NUnit大多都是绿色版的,不存在安装的问题。但也有一部分用的可能是打包成MSI的程序,直接安装一下就好了。
二、执行测试程序:
NUnit提供了三种模式:GUI模式(nunit-gui.exe)、命令行模式和插件模式。我只使用的是GUI模式的,其它两种模式您可以去用用。
三、如何编写用于NUnit单元测试的类:
1.首先创建一个要测试的类文件[ClassLibraryForTestTool]。
代码:
1
using
System;
2
using
System.Collections.Generic;
3
using
System.Text;
4![None.gif](/Images/OutliningIndicators/None.gif)
5
namespace
ClassLibraryForTestTool
6![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
{
7
public class ClassMain
8![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
9
public string Add(int N3)
10![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
11
switch (N3)
12![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
13
case 1:
14
return "You Input 1.";
15
break;
16
case 2:
17
return "You Input 2.";
18
break;
19
default:
20
return "You Input wrong number.";
21
}
22
}
23
}
24
}
25
2.创建一个测试的类[NTestingCodes]:![None.gif](/Images/OutliningIndicators/None.gif)
2
![None.gif](/Images/OutliningIndicators/None.gif)
3
![None.gif](/Images/OutliningIndicators/None.gif)
4
![None.gif](/Images/OutliningIndicators/None.gif)
5
![None.gif](/Images/OutliningIndicators/None.gif)
6
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](/Images/dot.gif)
7
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
8
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](/Images/dot.gif)
9
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
10
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](/Images/dot.gif)
11
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
12
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](/Images/dot.gif)
13
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
14
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
15
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
16
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
17
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
18
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
19
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
20
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
21
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
22
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
23
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
24
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
25
![None.gif](/Images/OutliningIndicators/None.gif)
在其中添加一个类文件[NClassLibraryForTestTool.cs]
引用NUnit.Framework
![AddFrameworkRefrence.JPG](https://i-blog.csdnimg.cn/blog_migrate/7f6be6aabb336b8d24a8817e0fc47931.jpeg)
然后在代码之前添加:
1
using NUnit.Framework;
![None.gif](/Images/OutliningIndicators/None.gif)
要想让编写的代码让NUnit识别,需要在类前面添加[TestFixture],并且在方法前面添加[Test]。并且注意,测试类中的代码必须为Public Void型。
代码:
1
using
System;
2
using
System.Collections.Generic;
3
using
System.Text;
4![None.gif](/Images/OutliningIndicators/None.gif)
5
using
NUnit.Framework;
6![None.gif](/Images/OutliningIndicators/None.gif)
7
namespace
NTestingCodes
8![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
{
9
[TestFixture]
10
public class NClassLibraryForTestTool
11![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
12
[Test]
13
public void Add()
14![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
15
Console.WriteLine("Prepare to test
.");
16
ClassLibraryForTestTool.ClassMain cm = new ClassLibraryForTestTool.ClassMain();
17
string rvalue;
18
rvalue = cm.Add(1);
19
Console.WriteLine("Rvalue from 1: " + rvalue);
20
rvalue = cm.Add(2);
21
Console.WriteLine("Rvalue from 2: " + rvalue);
22
rvalue = cm.Add(3);
23
Console.WriteLine("Rvalue from 3: " + rvalue);
24![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
25
Console.WriteLine("Test compelete!");
26
}
27
}
28
}
现在打开NUnit-Gui.exe,打开项目,找到那个生成的NtestingCodes.dll文件,如图:
![None.gif](/Images/OutliningIndicators/None.gif)
2
![None.gif](/Images/OutliningIndicators/None.gif)
3
![None.gif](/Images/OutliningIndicators/None.gif)
4
![None.gif](/Images/OutliningIndicators/None.gif)
5
![None.gif](/Images/OutliningIndicators/None.gif)
6
![None.gif](/Images/OutliningIndicators/None.gif)
7
![None.gif](/Images/OutliningIndicators/None.gif)
8
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](/Images/dot.gif)
9
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
10
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
11
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](/Images/dot.gif)
12
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
13
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
14
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](/Images/dot.gif)
15
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
![dot.gif](/Images/dot.gif)
16
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
17
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
18
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
19
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
20
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
21
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
22
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
23
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
24
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
25
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
26
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
27
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
28
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![FrameworkOpenProject.JPG](https://i-blog.csdnimg.cn/blog_migrate/1c6d51285aa9aee7ee7df74f4cfba261.jpeg)
点击运行,以下是测试结果:
![FrameworkTestProject.JPG](https://i-blog.csdnimg.cn/blog_migrate/eaa2afc142cdd4a9e3e7f662d809db56.jpeg)
您可以单击左面的父结点,以便测试整个项目中的所有方法,单击一个方法的结点就仅对一个结点进行测试。
四、使用中的一些小技巧:
我在实际使用中,一般喜欢用Consonle.WriteLine()方法,把执行步骤的信息打印出来,这样就可以查看程序运行到哪一步出了问题。
不必担心Consonle.WriteLine()方法会显示一些乱七八糟的东西,只要不是Consonle程序,都不会显示的。当然,为了避免此问题你也可以用#if #endif 语句进行标识。
另外,还有人可能会用到“Test, ExpectedException(typeof (ArgumentException))]”,但我一直就只用的Test,现在对于我还算够用。
使用Ctrl+Shift+B键还可以快速生成解决方案。
当然,这只是我个人的一点使用过程,相信NUnit工具还有更为强大的功能,希望高手不吝赐教。