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


    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 企业应用开发详解一书中指出

  • 相关阅读:
    docker简单入门之使用docker容器部署简单的java web开源项目jpress博客程序
    go语言的安装、环境变量配置及简单使用
    bootstrap4简单使用和入门02-bootstrap的js组件简单使用
    bootstrap4简单使用和入门01-简单表单的使用
    bootstrap4简单使用和入门03-响应式布局
    python操作三大主流数据库(14)python操作redis之新闻项目实战②新闻数据的展示及修改、删除操作
    python操作三大主流数据库(13)python操作redis之新闻项目实战①新闻数据的导入
    python操作三大主流数据库(12)python操作redis的api框架redis-py简单使用
    python操作三大主流数据库(11)redis的安装和简单使用
    python操作三大主流数据库(10)python操作mongodb数据库④mongodb新闻项目实战
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/9555942.html
Copyright © 2020-2023  润新知