14.2 支持单元测试的类

14.2.1 通用测试工具

org.springframework.test.util包中包含多个用于单元测试和集成测试的通用工具。

ReflectionTestUtils是一个基于反射的工具方法集,开发者在这些测试场景下使用它们:需要改变一个常量的值、需要改变一个非public的属性、需要调用一个非public的setter方法或需要调用一个非public的配置或生命周期回调方法,这些测试场景出现在当测试的程序代码涉及如下用例:

  • ORM框架,比如JPA和Hibernate,这些框架纵容在一个域实体中直接访问私有或受保护的属性而不是通过公开的setter方法
  • Spring对@Autowired@Inject@Resource等注解的支持,这些注解为私有或受保护的属性、setter方法和配置方法提供了依赖注入
  • 使用如@PostConstruct@PreDestroy等用于生命周期回调方法的注解

AopTestUtils是一个AOP相关的工具方法集。这些方法可用于获取一个隐藏在一个或多个Spring代理之后的原目标对象的引用。例如,如果您使用像EasyMock或Mockito这种库将一个bean配置成一个动态Mock,并且该Mock包装在Spring代理中,为了配置Mock上的预期并执行校验,您可能需要直接访问原Mock。Spring的核心AOP工具类请看AopUtilsAopProxyUtils类。

14.2.2 Spring MVC

org.springframework.test.web包中包含ModelAndViewAssert类,可以结合使用JUnit、TestNG或其他测试框架来进行Spring MVC的ModelAndView对象的单元测试。

使用ModelAndViewAssert类,结合MockHttpServletRequestMockHttpSession等等来自Spring的Servlet API Mock的类,可以把Spring MVC控制器当作POJO进行单元测试。要结合Spring MVC的WebApplicationContext配置对Spring MVC和REST控制器进行彻底的集成测试,请使用Spring MVC测试框架


书籍推荐