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

    感知机(perceptron)是二分类的线性分类模型,输入为实例的特征向量,输出为实例的类别(取+1和-1).感知机对应于输入空间中将实例划分为两类的分离超平面.感知机旨在求出该超平面,为求得超平面导 ...

  2. Grunt :任务自动管理工具

    来自<JavaScript 标准参考教程(alpha)>,by 阮一峰 在Javascript的开发过程中,经常会遇到一些重复性的任务,比如合并文件.压缩代码.检查语法错误.将Sass代码 ...

  3. wamp集成环境开启虚拟主机多站点功能

    方法/步骤   如果不是全白色,说明没有正常启动,先解决这个情况再进行下一步操作. 我们一键安装wamp到D盘,并可以正常启动,状态如下图所示:   在D:\wamp\bin\apache\Apach ...

  4. ERP调研之 对话

    开卷语: 2009年8月6号,A公司ERP项目顺利启动,按照项目进度的安排,项目组成员立即投入到紧张而又忙碌的的业务调研之中.这次为期3周的业务调研面向企业所有业务部门,包括产品部门.采购部门.计划部 ...

  5. ubuntu中apt-get安装与默认路径

    一.apt-get 安装 deb是debian linus的安装格式,跟red hat的rpm非常相似,最基本的安装命令是:dpkg -i file.deb或者直接双击此文件 dpkg 是Debian ...

  6. Qt之国际化

    简介 Qt国际化属于Qt高级中的一部分,本想着放到后面来说,上节刚好介绍了Qt Linguist,趁热打铁就一起了解下. 对于绝大多数的应用程序,在刚启动时,需要加载默认的语言(或最后一次设置的语言) ...

  7. 漫游Kafka实战篇之客户端API

    Kafka Producer APIs 旧版的Procuder API有两种:kafka.producer.SyncProducer和kafka.producer.async.AsyncProduce ...

  8. 每个极客都应该知道的Linux技巧

    每个极客都应该知道的Linux技巧 2014/03/07 | 分类: IT技术 | 0 条评论 | 标签: LINUX 分享到:18 本文由 伯乐在线 - 欣仔 翻译自 TuxRadar Linux. ...

  9. vijos 1379 字符串的展开

    23333333333333333 #include<iostream> #include<cstdio> #include<cstring> #include&l ...

  10. HDU 1711 Number Sequence (数字KMP,变形)

    题意: 在一个序列中找到一个连续的子序列,返回其开始位置. 思路: 每个数字当成1个字符,长的序列是原串,短的序列是模式串,求next数组后进行匹配. #include <iostream> ...