代码改变世界

.NET工具篇(三)—NUnit

2013-03-21 07:27  左眼微笑右眼泪  阅读(525)  评论(0编辑  收藏  举报

      NUnit是一个开源的.NET下的单元测试工具,可以在它的官方网站上获得它的源码,也可以下载一个安装包。它是一个非常好用的.NET单元测试工具。下面简单介绍一下其用法。

      首先在网上下载一个安装包,然后运行安装包,安装完成后,桌面上就会有一个图标,点击,主界面如下:

image

      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按钮,即可看到测试的结果,红色代表有测试失败的用例,绿色代表全部测试通过。

image

      红色的代表有错误,通过提示,找到代码中相应的测试方法,修改后然后重新测试:

image

      重新测试后没有红色的,都是绿色的,测试就都通过了。

      在上面的代码,还看到了一个setup标记,它的作用就相当于构造函数,NUnit在每一次运行测试类中的一个测试之前都会执行setup方法,同样还有另外一个标记teardown,这个标记的作用就相当于析构函数,NUnit在每一次运行测试类中的一个测试之后都会执行teardown方法。另外还有其他的一些特别属性,后面再进行介绍。

      NUnit还可以集成到VS中去,打开测试项目用的属性对话框,设置“启动外部程序”:

image

     外部程序就选择你安装的NUnit,命令行参数就写你测试的项目所生成的dll,工作目录就是你测试项目的bin目录,设置之后,把测试用的类库项目设置为启动项,然后运行,它就会自动启动NUnit进行测试。

    上面对NUnit测试工具做了一个简单的介绍,后面有机会再深入介绍一下它的其他用法。