单元测试最佳实战容器内测试的理解

这里首先要明白几个基本的概念

spring容器和springmvc容器,以及web容器的关系

首先 springmvc和spring它俩都是容器,容器就是管理对象的地方,例如Tomcat,就是管理servlet对象的,而springMVC容器和spring容器,就是管理bean对象的地方,再说的直白点,springmvc就是管理controller对象的容器,spring就是管理service和dao的容器,这下你明白了吧。所以我们在springmvc的配置文件里配置的扫描路径就是controller的路径,而spring的配置文件里自然配的就是service和dao的路径

代码中通过 new ClassXMLAllpiction获得的ApplicationContext对象是获得对应的是Spring的容器。不是web容器,这里要区分清楚。

测试dao层、service层、controller层

测试dao层的时候,需要手动准备测试数据、验证测试数据、数据库事务操作比较麻烦,手动编写单元测试代码很复杂,这个时候引入了dbUnit框架
可以很好的帮助我们进行dao成的单元测试。

测试业务层的单元测试时候,测试业务时候正确,这个时候为了实现和外界依赖对象的隔离,这个时候就需要引入mock框架,让mock框架模拟出
dao对象,实现业务与外界的隔离,减少外界对单元测试的影响,仅仅保证验证业务功能的正确性,这就是通常意义上的单元测试,
如果单元测试过程中依赖了真实的dao,这叫集成测试,但是有的书籍上也叫做集成单元测试。
在测试的过程中对象通常不通过new UserService()的方式,而是引入Spring框架的Spring容器ApplicationContext帮助我们管理单元测试对象,
这个时候引入了Spring TestContext框架

在测试controller层的时候,需要要使用到HttpRequets、httpReponse等对象,这个时候可以使用mock框架模拟这些具体的对象,
,如Spring MockMvc,它模拟了真实的web容器,可以向单元测试提供HttpRequets、httpReponse等对象,

SpringMVC测试框架

基于RESTful风格的SpringMVC的测试,我们可以测试完整的Spring MVC流程,即从URL请求到控制器处理,再到视图渲染都可以测试。

一 MockMvcBuilder

MockMvcBuilder是用来构造MockMvc的构造器,其主要有两个实现:StandaloneMockMvcBuilder和DefaultMockMvcBuilder,分别对应两种测试方式,即独立安装和集成Web环境测试(此种方式并不会集成真正的web环境,而是通过相应的Mock API进行模拟测试,无须启动服务器)。对于我们来说直接使用静态工厂MockMvcBuilders创建即可。

mckMVC没有启动真正的web服务器:这就是容器外的测试

如何启动了web服务器,使用如果通过启动服务器,建立http client进行测试,例如,服务器部署在tomcat中,编写android客户端使用http client进行测试接口访问,这就是真正的容器内测试,

这里就区分了容器内测试和容器外测试的区别

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

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

cactus进行容器内测试,需要将war运行在具体的容器中,这就是容器内单元测试

原文地址:https://www.cnblogs.com/kebibuluan/p/9533617.html