• 单元测试深入浅出的理解


    1.在单元测试总结之前首先要明白几个容器的概念

    (1)Spring容器:用来管理dao和service成的声明周期

    (2)SpringMVc容器:用来管理controller的生命周期,Spring容器和SpringMvc容器是父与子的关系,control中可以访问Service,但是Service不可以访问Controller

    (3)web容器,用来管理Servlet的生命周期,httprequert等对象都是web容器例如tomcat等产生的。

    在进行单元测试的时候,我们需要保证测试的独立性,类与类之间不能有依赖,例如service中依赖的dao,我们需要通过mock的方式来获得,这就是我们通常所说的单元测试。

    但是在j2ee环境中,我们在测试业务类或控制层的时候,我们需要引入真实的东西,例如将真实的dao装配到service中对serive进行测试,这个时候就叫集成测试,有的地方叫做集成单元测试。我们编写的代码一般都是集成单元测试。这个时候真实的dao对象的产生需要依赖Spring容器,在Spring容器中获得对应的dao对象

     

    传统的集成单元测试获得Spring容器的时候存在下面的不足

    在junit单元的测试的setUp方法中获得对应的Spring容器,然后通过容器手工获得对应的bean对象

     

    但是上面的方法存在一个很严重的问题,会让Spring容器被初始化多次,按照Junit框架运行的原理,调用一次test测试方法就会将当前的测试类实例化一次,上面调用了

    两次测试方法,就会将当前的测试类实例两次,就会调用两次setUp方法,让Spring容器被加载两次,导致Spring容器被初始化多次。

    为了解决上面存在的问题,Spring为我们提供了下面的的框架解决单元测试过程中让Spring容器被初始化多次的问题。那就是Spring-testContext框架,这个框架可以解决让

    Spring容器被多次初始化的问题

    1、在J2EE中进行单元测试的时候。

    引入了Spring-testContext框架,在框架中引入了Spring容器,让单元测试运行在Spring容器中,让Spring容器来管理我们的对象,例如测试Sevice的时候,通过autowire来引入dao

    3、对Servlet进行单元测试

    这个时候就涉及到web容器内单元测试,还是web容器外单元测试

    容器内单元测试就是将应用部署到真实的容器中进行单元测试,例如常见的catus整合jetty进行容器内单元测试

    在容器内进行单元测试最大的问题就是web容器的启动速度很慢,tomcat启动需要5秒。weblogic启动需要30秒。

    第二钟方法就是在容器外进行单元测试,使用mock的方式来模拟httprequest 、servlet等对象,这个时候Spring  TestContext给我们提供了Spring MVC框架,该框架可以模拟客户端的所有请求,完成容器外的单元测试,运行效率超级高。

    1. 为Controller编写测试,不需要应用服务器环境
    2. 为Service编写测试,不需要应用服务器环境

    Spring为我们提供了一个测试套件Spring-test,与JUnit结合,可以在运行测试时启动IoC容器测试Service,数据库,也可以在脱离web容器的环境下模拟http请求测试Controller,甚是给力。

    测试Controller
    当我们编写完一个Controller后,常规的测试方式就是部署运行应用,然后观察运行效果。如果想要编写测试,也要用Mock对象模拟请求参数,模拟HttpSession,特别麻烦。现在spring-test为我们提供了一个更加优雅的测试方式。例如,要测试下面的Controller:
    @RequestMapping(value = {"/", "/shop"}, method = RequestMethod.GET)
    public String home() {
    return "index";

    不清楚的请书籍:

    在精通spring 2.x 企业应用开发详解一书中指出

    在精通spring 3.x 企业应用开发详解一书中指出

    在精通spring 4.x 企业应用开发详解一书中指出

  • 相关阅读:
    Android学习 反编译APK文件
    全面剖析C#之String对象
    Retrieving the COM class factory for component with CLSID {0006F03A00000000C000000000000046} failed due to the following error: 80080005
    面向对象的函数式编程语言Scala 简介安装
    Export/Import相关操作
    Windows Server 2008 R2(64位)下安装SQL Server 2005
    C#操作FTP总结
    Windows Server 2008 R2(64位)下IIS7.5操作
    Quartz.Net 学习随手记之01 初步介绍
    差分约束系统
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/9555942.html
Copyright © 2020-2023  润新知