单元测试最佳实战:单元测试和集成测试

玩技站长 测试资讯评论50字数 1517阅读模式
摘要1、单元测试中测试的是类中的方法,对每个类中的方法进行单独测试,测试方法与测试方法之间是独立的不相互依赖的,并且测试方法不能依赖外

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

例如service中依赖dao,这个dao不是真实的,而是通过mock对象产生的,这就是单元测试。文章源自玩技e族-https://www.playezu.com/194249.html

2.集成测试,就是模块与模块之间相互依赖,如果测试service的时候,如果依赖dao,这个dao不是mock产生的,在容器中真实产生的,依赖真实的dao,那么这就是集成测试。文章源自玩技e族-https://www.playezu.com/194249.html

3.spring Test框架中的spring MVC框架,是在web容器外进行单元测试,spring mvc 会模拟用户的请求,模拟用户的httpRequest session等对象完成对web应用的测试。文章源自玩技e族-https://www.playezu.com/194249.html

4、如果在测试的时候,不运行在真实的容器中进行测试,那么在测试所有的类的时候,类中依赖的对象都必须全部是通过mock对象产生。如果是集成测试,运行在容器中,通过spring对对象进行管理,我们就能够引入真实的对象,完成集成测试。文章源自玩技e族-https://www.playezu.com/194249.html

所以一般对于业务层和web我们都进行集成测试,让测试环境运行在容器之中,在web进行集成测试的时候,需要模拟用户的请求访问,这个时候spring mockMVC框架就是模拟用户的请求访问,产生HttpReques等对象,完成web框架的集成测试。文章源自玩技e族-https://www.playezu.com/194249.html

这里强调容器:并不是指tomcat,而是指的是Spring 容器,在单元测试的时候,不应该依赖Spring 容器,换句话说就是用户不应该通过在单元测试的时候启动ApplicationContext容器,在容器中获得真实的bean对象,bean对象应该通过mock对象产生使用junit测试spring框架应用的时候存在下面的问题。文章源自玩技e族-https://www.playezu.com/194249.html

文章源自玩技e族-https://www.playezu.com/194249.html

文章源自玩技e族-https://www.playezu.com/194249.html

传统的使用junit测试spring框架的程序,都是在setUp方法中 new FileSysytemXMl,来获得Spring容器的上下文,在Spring 容器中手动获得对应的对象,这个对象不是通过mock产生的所以这是集成测试。文章源自玩技e族-https://www.playezu.com/194249.html

上面问题存在一个很严重的问题,按照junit框架的设计原理,在junit中调用一次测试方法,每调用一次测试方法都会重新生成一个测试类实例,上面如果调用3个测试方法,就会生成三个测试类实例。会调用三次setup方法,导致spring容器被初始化多次。如果解决这个问题了,spring TestContext框架已经解决了该问题,提供了Spring 容器的上下文,不会导致Spring 容器被初始化多次。文章源自玩技e族-https://www.playezu.com/194249.html

按照上面的测试代码,如果要实现数据库事务的操作,需要手动编写很多复杂的代码,相当的麻烦,但是使用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";
  }

玩技站长微信
添加好友自动发送入群邀请
weinxin
rainbow-shownow
玩技官方公众号
官方微信公众号
weinxin
PLAYEZU
 
  • 版权提示:本站仅供存储任何法律责任由作者承担▷诈骗举报◁▷新闻不符◁▷我要投稿◁
    风险通知:非原创文章均为网络投稿真实性无法判断,侵权联系2523030730
    免责声明:内容来自用户上传发布或新闻客户端自媒体,切勿!切勿!切勿!添加联系方式以免受骗。
  • 原创转载:https://www.playezu.com/194249.html
    转载说明: 点我前往阅读>>>
匿名

发表评论

匿名网友
确定