zoukankan      html  css  js  c++  java
  • Asp.net mvc +Ajax +Extjs+NHibernate 系列之单元测试

    概述
    使用单元测试框架,Nunit。包括对controller的测试,以及moq框架的使用。
    详解
    1,数据库层Service的单元测试

    引入:using NUnit.Framework;

    代码
        [TestFixture]
        
    public class SystemConfigServiceTest
        {

            [Test]
            
    public void GetByIdTest()
            {
                SystemConfig configExcept 
    = new SystemConfig();
                configExcept.PkId 
    = 78;
                SystemConfig configActual 
    = new SystemConfigService().GetById(78);
                Assert.AreEqual(configExcept.PkId, configActual.PkId,
    "插叙编号为78的,如果测试不通过,请检查");
            }
        }

     类的特性标记为 TestFixture,要测试的方法特性标记为:Test,初始化测试对象,出入参数,判断返回值与你预期的值的比较。

    这种测试是比较简单的单元测试。

    2,Controller的单元测试

    Moq 的介绍比较多http://www.cnblogs.com/haoliansheng/archive/2010/04/27/1721816.html

    代码
            [Test]
            
    public void IndexFirstTest()
            {
                SystemConfigController controller 
    = new SystemConfigController();

                var httpContext 
    = new Mock<HttpContextBase>();
                var request 
    = new Mock<HttpRequestBase>();
                NameValueCollection queryString 
    = new NameValueCollection();
                queryString.Add(
    "currentIndex""1");
                request.Setup(r 
    => r.QueryString).Returns(queryString);
                httpContext.Setup(ht 
    => ht.Request).Returns(request.Object);

                ControllerContext controllerContext 
    = new ControllerContext();
                controllerContext.HttpContext 
    = httpContext.Object;

                controller.ControllerContext 
    = controllerContext;

                
    //当前为19条记录,总共有4页

                
    //第一页为5条记录
                
    //Act
                ViewResult result1 = controller.Index(1nullas ViewResult;

                
    //Assert
                ViewDataDictionary viewData1 = result1.ViewData;
                List
    <SystemConfig> model1 = viewData1.Model as List<SystemConfig>;
                
    //Assert.AreEqual(1, viewData1["CurrendIndex"],"单元测试的当前页为 ,第一页");
                Assert.AreEqual(5, model1.Count, "第一页的长度应该为5,错误有可能是没有数据");
            }

      一个测试方法,

                var httpContext = new Mock<HttpContextBase>();

                var request = new Mock<HttpRequestBase>();

    初始化两个对象,moq其实就是模拟两个对象。用他们来进行上下文的操作。

    request.Setup(r => r.QueryString).Returns(queryString);初始化的过程

      //第一页为5条记录

                //Act

                ViewResult result1 = controller.Index(1, null) as ViewResult;

    然后controller直接执行方法就可以了,在判断执行后的结果与预期的。

    代码
            [Test]
            
    public void Index0Test()
            {
                SystemConfigController controller 
    = new SystemConfigController();

                var httpContext 
    = new Mock<HttpContextBase>();
                var request 
    = new Mock<HttpRequestBase>();
                NameValueCollection queryString 
    = new NameValueCollection();
                queryString.Add(
    "currentIndex""0");
                request.Setup(r 
    => r.QueryString).Returns(queryString);
                httpContext.Setup(ht 
    => ht.Request).Returns(request.Object);

                ControllerContext controllerContext 
    = new ControllerContext();
                controllerContext.HttpContext 
    = httpContext.Object;

                controller.ControllerContext 
    = controllerContext;

                
    //第0页五条数据
                ViewResult result3 = controller.Index(0nullas ViewResult;

                ViewDataDictionary viewData3 
    = result3.ViewData;
                List
    <SystemConfig> model3 = viewData3.Model as List<SystemConfig>;
                
    //Assert.AreEqual(0, viewData3["CurrendIndex"]);
                Assert.AreEqual(5, model3.Count);
            }

    技术要点

    controller测试,moq框架的使用。

  • 相关阅读:
    捕获Java线程池执行任务抛出的异常
    Java Singleton 单例模式
    深度解析Java内存的原型及工作原理
    使用Spring管理数据源连接池
    Java中用内存映射处理大文件
    基于Java阻塞队列的搜索实例
    Java学习之将图片文件保存到数据库
    Java使用反射调用方法
    Java程序员易犯的10个SQL错误
    Hibernate中的数据库增改删查操作
  • 原文地址:https://www.cnblogs.com/csharponworking/p/1791640.html
Copyright © 2011-2022 走看看