NUnit是一个开源的.NET下的单元测试工具,可以在它的官方网站上获得它的源码,也可以下载一个安装包。它是一个非常好用的.NET单元测试工具。下面简单介绍一下其用法。
首先在网上下载一个安装包,然后运行安装包,安装完成后,桌面上就会有一个图标,点击,主界面如下:
NUnit的图形界面有三个主要部分,左边是一个树形列表,显示所有的测试,信息和错误消息显示在右上方,堆栈跟踪信息显示在右下方。
要想用NUnit进行单元测试,需要新建两个项目,一个是被测试的项目,一个是用来测试的项目,用来测试的项目必须是类库形式的项目。下面是一个简单的例子,新建了一个被测试的项目,里面有一个类Operation,这个类实现&,|,!以及^运算:
public class Operation
{
public string AndOperation(string s1, string s2)
{
int num1 = Convert.ToInt32(s1, 2);
int num2 = Convert.ToInt32(s2, 2);
int result= num1 & num2;
return Convert.ToString(result, 2).PadLeft(8,'0');
}
public string OrOperation(string s1, string s2)
{
int num1 = Convert.ToInt32(s1, 2);
int num2 = Convert.ToInt32(s2, 2);
int result = num1 | num2;
return Convert.ToString(result, 2).PadLeft(8, '0');
}
public string NoOperation(string s1)
{
int num1 = Convert.ToInt32(s1, 2);
int result = ~num1;
return Convert.ToString(result, 2).PadLeft(8, '0');
}
public string DiffOrOperation(string s1, string s2)
{
int num1 = Convert.ToInt32(s1, 2);
int num2 = Convert.ToInt32(s2, 2);
int result = num1 ^ num2;
return Convert.ToString(result, 2).PadLeft(8, '0');
}
}
下面就对这个类进行测试,测试之前还需要建一个测试用的项目,取名叫做Test,里面新建一个类名为TestOperation,在测试用的项目中,最好是为每个需要测试的类都建一个对应的测试类。TestOperation代码如下:
[TestFixture]
public class TestOperation
{
Operation op = null;
string str = "";
[SetUp]
public void SetUp()
{
op = new Operation();
str = "";
}
[Test]
public void TestAndOperation()
{
string s1 = "";
string s2 = "";
//00101010&00001010
s1="10010001";
s2="00101011";
str = op.AndOperation(s1,s2);
Assert.AreEqual(str,"00000001");
s1 = "11011101";
s2 = "11011011";
str = op.AndOperation(s1, s2);
Assert.AreEqual(str, "11011001");
s1 = "00101010";
s2 = "11100101";
str = op.AndOperation(s1, s2);
Assert.AreEqual(str, "00100000");
s1 = "11010101";
s2 = "00101010";
str = op.AndOperation(s1, s2);
Assert.AreEqual(str, "00000000");
s1 = "11001001";
s2 = "11011101";
str = op.AndOperation(s1, s2);
Assert.AreEqual(str, "11001001");
}
}
在这个类里面,其实只对Operation中的AndOperation这个方法进行了测试。通过这个类的代码,可以看出以下几点:
1.在测试用的类前面必须加上[TestFixture]标识,TestFixture是用来标记一个包含NUnit自动化测试的类。(注意在添加这些标记之前,必须先引用Nunit的类库NUnit.Framework,直接通过添加引用,然后在”.NET”面板中即可找到。)
2.测试的方法前面需要加上[Test]标记,Test是用来表示这是一个需要被调用的自动化测试。给每个测试的方法前面都需要加上这个标识。
3.测试的方法返回类型是Void,并且不接受任何形式的参数。
然后在测试的方法中,直接调用new一个Opertaion对象,然后调用里面的方法(必须添加了对被测试项目的引用),最后用Assert类里面的方法来判断是否命中你想要的结果。Assert类位于NUnit框架的命名空间,包含一些静态方法。比如Assert.IsTrue(判断结果是不是为真),Assert.AreEqual(判断两对象是不是相等),Assert.AreSame(判断两个对象是不是相同的对象)等。选择合适的静态方法,至此,一个简单的测试项目就写好了,直接生成,然后拖放到NUnit中去,点击Run按钮,即可看到测试的结果,红色代表有测试失败的用例,绿色代表全部测试通过。
红色的代表有错误,通过提示,找到代码中相应的测试方法,修改后然后重新测试:
重新测试后没有红色的,都是绿色的,测试就都通过了。
在上面的代码,还看到了一个setup标记,它的作用就相当于构造函数,NUnit在每一次运行测试类中的一个测试之前都会执行setup方法,同样还有另外一个标记teardown,这个标记的作用就相当于析构函数,NUnit在每一次运行测试类中的一个测试之后都会执行teardown方法。另外还有其他的一些特别属性,后面再进行介绍。
NUnit还可以集成到VS中去,打开测试项目用的属性对话框,设置“启动外部程序”:
外部程序就选择你安装的NUnit,命令行参数就写你测试的项目所生成的dll,工作目录就是你测试项目的bin目录,设置之后,把测试用的类库项目设置为启动项,然后运行,它就会自动启动NUnit进行测试。
上面对NUnit测试工具做了一个简单的介绍,后面有机会再深入介绍一下它的其他用法。