C#单元测试

简单来说,单元测试就是局部测试,即是对项目中的某个静态类测试、静态方法测试、类的实例化测试以及类的方法测试。当您有一个具体的项目时您可以通过运行查看结果的方式进行测试,但当您只有一个类而没有完整的项目时便会很麻烦,单元测试则可以解决这种问题。单元测试有两种方法,一个是NUnit,另一个是微软在VS提供的单元测试,我个人觉得用VS内置的单元测试比较简单,因为使用Nunit测试的话需要下载两个文件,并且用Nunit测试的话需要自己手动输入测试类,用VS内置的测试则会自动生成。还有用VS内置的测试时,测试所用的类和方法有中文提示(用Nunit的话没有,我记得是这样),不过我看网上其他人的说法是VS内置的单元测试会相对复杂但更全面。我是在网上结合多个资料学习和总结的,会比较基础,不要嫌多(只是我比较啰嗦而已),希望对看到的您有些许帮助,这里用两种方法对简单的例子进行测试。

一、使用Nunit进行单元测试

1、下载Nunit,地址为:http://www.nunit.org/index.php?p=download

2、下载Visual Nunit 2010,地址为:http://visualstudiogallery.msdn.microsoft.com/c8164c71-0836-4471-80ce-633383031099

3、创建项目并测试

  1.VS2010中新建一个项目,由于我们只需要对稍后创建的类进行测试,与创什么项目无关,所以您可以创建窗体应用程序或Web应用程序的项目等,这里我创的是控制台应用程序,为了方便查看,我把项目名称取为:使用Nunit进行单元测试

  2.在解决方案资源管理器中的引用上右键,选择添加引用,找到并添加步骤1中下载的Nunit中的nunit.framework.dll文件(默认安装时路径为:C:\Program Files \NUnit 2.6\bin\framework\nunit.framewor.dll)。

  3.创建一个普通的类,后面我们将会对该类进行测试。右键解决方案资源管理器中的项目名称->添加->类,将类名改为SimpleClass,代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace 使用Nunit进行单元测试

{

  public class SimpleClass

  {

    /// <summary>

    /// 除法运算

    /// </summary>

    public int Division(int num1,int num2)

    {

      return num1 / num2;

    }

  }

}

  4.普通类编写好后,我们现在再创建一个测试类。右键解决方案资源管理器中的项目名称->添加->类,将类名改为TestClass,代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using NUnit.Framework;//添加命名空间

namespace 使用Nunit进行单元测试

{

  [TestFixture]//代表用于测试的类

  public class TestClass

  {

    /// <summary>

    /// 模拟用正常数据进行测试

    /// </summary>

    [Test]//代表测试用例

    public void DivisionTestNatural()

    {

      var simpleClass = new SimpleClass();

      var result = simpleClass.Division(10, 5);//调用SimpleClass类中的除法运算,用10除以5

      Assert.AreEqual(2, result);//设置测试的期望值为2,实际值为result,若实际值不等于期望值时即测试出错

    }

    /// <summary>

    /// 模拟用异常数据进行测试

    /// </summary>

    [Test]

    public void DivisionTestNoNatural()

    {

      var simpleClass = new SimpleClass();

      var result = simpleClass.Division(10, 5);

      Assert.AreEqual(3, result);

    }

  }

}

  5.快捷键Ctrl+F5运行项目(网上的资料写的是生成项目,但这么做的话如果您测试过一个类之后又新建了一个类要进行测试,您会发现找在Visual Nunit中找不到您新创建的类,如果这里您看不懂,不过做完项目后您就会明白)。选择视图->其他窗口->Visual Nunit(我查找资料时别人的资料说Ctrl+F7是快捷键,不过我试了没效。如果在其他窗口中找不到Visual Nunit则将VS关闭后重新打开),在Project、Namespace、Fixture中选择对应项(当您在前文中像我所说的创建第二个测试类之后只是生成项目而没有使用Ctrl+F5运行项目,您会发现您在Fixture中找不到您新创建的测试类),最后点击Run按钮。

二、使用vs进行单元测试

1、同前面提到的用Nunit测试一样需要先创建项目,这里我同样创建的是控制台应用程序,并命名项目为:使用VS进行单元测试。

2、创建一个普通类,为了方便需要学习两种方法的朋友可以对比测试时的不同,我将创建和上文使用Nunit一样的类,即类名一样为:SimpleClass,代码编写也同上文一样,好吧,我复制就好:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace 使用VS进行单元测试

{

  public class SimpleClass

  {

    /// <summary>

    /// 除法运算

    /// </summary>

    public int Division(int num1,int num2)

    {

      return num1 / num2;

    }

  }

}

3、编写完SimpleClass类之后,在页面上直接右键->创建单元测试,接着在弹出的对话框中选择您需要测试的类或方法,这里我只需要对步骤2中的除法运算的方法进行测试,所以在对话框中勾选Division方法,然后点击确定后会再弹出对话框,该对话框需要填写的是测试项目(类似于使用Nunit测试时创建的测试类TestClass,使用VS测试称为测试项目)的名称,还是为了对比,我将名称改为TestClass,点击创建,在解决方案资源管理器中可以看到生成了一个解决方案和一个文件夹,并且会自动跳到SimpleClassTest.cs的代码编写页面,在这个页面中需要编写和重点注意的方法是最下面的DivisionTest()方法,您需要做的是修改其中num1、num2和expected的值(我设置为与使用Nunit测试一样的值)并且将代码“Assert.Inconclusive("验证此测试方法的正确性。")”注释或删掉,整理后DivisionTest()方法代码如下:

/// <summary>

///Division 的测试

///</summary>

[TestMethod()]

public void DivisionTest()

{

  SimpleClass target = new SimpleClass(); // 创建SimpleClass对象

  int num1 = 10; // 参数1

  int num2 = 5; // 参数2

  int expected = 2; // 设置测试的期望值

  int actual;//用来接收测试的实际值

  actual = target.Division(num1, num2);//调用SimpleClass类中的Division()方法,并将返回值传给变量actual

  Assert.AreEqual(expected, actual);//该方法用来验证方法内的两个参数即期望值和实际值是否一致,如果不相等则测试不通过

  //Assert.Inconclusive("验证此测试方法的正确性。");//该句代码如果没有注释或删除,则最后显示的是无结论而不是测试通过或不通过

}

4、编写完上一步骤的代码后,在菜单栏中选择测试->运行->当前上下文中的测试,该例中结果为通过,若要不通过的例子只需将DivisionTest()方法中的变量expected的值由2改为其他数值即可。

以上就是单元测试的两种方法,如果有错误或不足的地方还请指出,当然有好的地方也稍微可以夸我一下哟~