zoukankan      html  css  js  c++  java
  • 单元测试最佳实战中--单元测试和集成测试

    1、单位测试中测试的是类中的方法,对每个类中的方法进行单独测试,测试方法与测试方法之间是独立的不相互依赖的,并且测试方法不能依赖外部的环境

    例如service中依赖dao,这个dao不是真实的,而是通过mock对象产生的,这就是单元测试

    2.集成测试,就是模块与模块之间相互依赖,如果测试service的时候,如果依赖dao,这个dao不是mock产生的,在容器中真实产生的,依赖真实的dao,那么这就是

    集成测试。

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

    3.spring Test框架中的spring MVC框架,是在web容器外进行单元测试,spring mvc 会模拟用户的请求,模拟用户的httpRequest session等对象完成对

    web应用的测试

    4、如果在测试的时候,不运行在真实的容器中进行测试,那么在测试在所有的类的时候,类中说依赖的对象都必须全部是通过mock对象产生,如果是集成测试

    如果运行在容器中,通过spring对对象进行管理,我们就能够引入真实的对象,完成集成测试

    所以一般对于业务层和web我们都进行集成测试,让测试环境运行在容器之中,在web进行集成测试的时候,需要模拟用户的请求访问,这个时候spring mockMVC框架就是模拟用户

    的请求访问,产生HttpReques等对象,完成web框架的集成测试。

    这里强调容器:并不是指tomcat,而是指的是Spring 容器,在单元测试的时候,不应该依赖Spring 容器,换句话说就是用户不应该通过在单元测试的时候启动ApplicationContext容器,

    在容器中获得真实的bean对象,bean对象应该通过mock对象产生

    使用junit测试spring框架应用的时候存在下面的问题

     

     

    传统的使用junit测试spring框架的程序,都是在setUp方法中 new FileSysytemXMl,来获得Spring容器的上下文,在Spring 容器中手动获得对应的对象,这个对象不是通过mock产生的

    所以这是集成测试。

    上面问题存在一个很严重的问题,按照junit框架的设计原理,在junit中调用一次测试方法,每调用一次测试方法都会重新生成一个测试类实例,上面如果调用3个测试方法,就会生成三个测试类实例

    就会调用三次setup方法,导致spring容器被初始化多次。如果解决这个问题了,spring TestContext框架已经解决了该问题,提供了Spring 容器的上下文,不会导致Spring 容器被初始化多次。

    按照上面的测试代码,如果要实现数据库事务的操作,需要手动编写很多复杂的代码,相当的麻烦,但是使用Spring TestContext框架,能够让我们很好的使用事务管理

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

  • 相关阅读:
    浅析匿名内部类
    Neo4j学习实录 下载-安装-springboot操作neo4j
    Objective-C内存管理教程和原理剖析2
    Objective-C内存管理教程和原理剖析
    Objective-C语法快速参考
    Objective-C语法
    一点基础的东西:Objective-C的类型和常量
    IOS开发之----异常处理
    UITextField的详细使用
    TextField知多少
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/9488408.html
Copyright © 2011-2022 走看看