单元测试深入浅出的理解

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

 

posted on   luzhouxiaoshuai  阅读(532)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示