简单来说,单元测试就是局部测试,即是对项目中的某个静态类测试、静态方法测试、类的实例化测试以及类的方法测试。当您有一个具体的项目时您可以通过运行查看结果的方式进行测试,但当您只有一个类而没有完整的项目时便会很麻烦,单元测试则可以解决这种问题。单元测试有两种方法,一个是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改为其他数值即可。

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

C#单元测试的更多相关文章

  1. Intellij idea添加单元测试工具

    1.idea 版本是14.0.0 ,默认带有Junit,但是不能自动生成单元测试,需要下载JunitGererator2.0插件 2.Settings -Plugins,下载 JunitGenerat ...

  2. Python的单元测试(二)

    title: Python的单元测试(二) date: 2015-03-04 19:08:20 categories: Python tags: [Python,单元测试] --- 在Python的单 ...

  3. Python的单元测试(一)

    title: Python的单元测试(一) author: 青南 date: 2015-02-27 22:50:47 categories: Python tags: [Python,单元测试] -- ...

  4. javascript单元测试框架mochajs详解

    关于单元测试的想法 对于一些比较重要的项目,每次更新代码之后总是要自己测好久,担心一旦上线出了问题影响的服务太多,此时就希望能有一个比较规范的测试流程.在github上看到牛逼的javascript开 ...

  5. 使用NUnit为游戏项目编写高质量单元测试的思考

    0x00 单元测试Pro & Con 最近尝试在我参与的游戏项目中引入TDD(测试驱动开发)的开发模式,因此单元测试便变得十分必要.这篇博客就来聊一聊这段时间的感悟和想法.由于游戏开发和传统软 ...

  6. 我这么玩Web Api(二):数据验证,全局数据验证与单元测试

    目录 一.模型状态 - ModelState 二.数据注解 - Data Annotations 三.自定义数据注解 四.全局数据验证 五.单元测试   一.模型状态 - ModelState 我理解 ...

  7. ABAP单元测试最佳实践

    本文包含了我在开发项目中经历过的实用的ABAP单元测试指导方针.我把它们安排成为问答的风格,欢迎任何人添加更多的Q&A's,以完成这个列表. 在我的项目中,只使用传统的ABAP report. ...

  8. python_单元测试unittest

    Python自带一个单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作. 步骤1:首先引入unittest模块--import un ...

  9. .Net中的AOP系列之《单元测试切面》

    返回<.Net中的AOP>系列学习总目录 本篇目录 使用NUnit编写测试 编写和运行NUnit测试 切面的测试策略 Castle DynamicProxy测试 测试一个拦截器 注入依赖 ...

  10. React单元测试——十八般兵器齐上阵,环境构建篇

    一个完整.优秀的项目往往离不开单元测试的环节,就 github 上的主流前端项目而言,基本都有相应的单元测试模块. 就 React 的项目来说,一套完整的单元测试能在在后续迭代更新中回归错误时候给与警 ...

随机推荐

  1. 蓝缘管理系统第三版推出。springMVC4.0+shiro1.2.3+spring4.x+Mybaits3.2.8

    blog.csdn.net/mmm333zzz/article/details/42059349 http://blog.csdn.net/zoutongyuan/article/details/41 ...

  2. SpringMVC整合Shiro——(3)

    SpringMVC整合Shiro,Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能. 第一步:配置web.xml <!-- 配置Shiro过滤器,先让Shiro ...

  3. Linux实用命令

    0. 基本命令 1. 压缩 解压 tar -zcvf a.tar.gz a #把a压缩成a.tar.gz tar -zxvf a.tar.gz #把a.tar.gz解压成a 2. vim小结 2.1 ...

  4. SeaJS 学习

    什么是系统 在生活和工作中,我们会接触到大量系统:自然界生态系统.计算机操作系统.软件办公系统,还有教育系统.金融系统.网络系统.理论系统等等.究竟什么是系统呢? 来看下维基百科的解释: 系统泛指由一 ...

  5. BroadcastService的测试用例

    程序运行起来之后,需要用多个telnet客户端来进行测试 连接的命令为conn deviceNumber 广播命令为broa message 需要注意的是:示例代码有bug, broadcastDic ...

  6. webhdfs追加写HDFS异常

    问题 {:timestamp=>"2015-03-04T00:02:47.224000+0800", :message=>"Retrying webhdfs ...

  7. apiCloud创建APP项目

    1.注册一个apiCloud账户 2.创建一个应用 3.安装sublime插件 4.用sublime创建应用 5.配置参数,保证一致 6.上传代码,两种方式 一种是压缩成zip 一种是配置svn,通过 ...

  8. R语言的向量化编程思维

    1.计算缺失值比例 perNA<- mean(is.na(Data1)) 2.按值替换 #which返回值是符合条件的下标 NAIDX<- which(Data2<=3 | Data ...

  9. 戏(细)说Executor框架线程池任务执行全过程(下)

    上一篇文章中通过引入的一个例子介绍了在Executor框架下,提交一个任务的过程,这个过程就像我们老大的老大要找个老大来执行一个任务那样简单.并通过剖析ExecutorService的一种经典实现Th ...

  10. Matlab---size,length和numel函数的用法

    size:获取数组的行数和列数 length:数组长度(即行数或列数中的较大值) numel:元素总数. 1.size()函数 s=size(A),当只有一个输出参数时,返回一个行向量,该行向量的第一 ...