14.单元测试

14.单元测试

依赖注入让你的代码更少地依赖容器,这不同于传统的Java EE开发。组成应用程序的POJO应当能在JUnit或TestNG测试框架中进行测试,对象只需使用new运算符实例化,而无需Spring或任何其他容器。开发者可以使用mock对象(第14.1节)(与其他有用的测试技术协同) 来隔离测试代码。如果遵循Spring的体系结构的建议,那么编写层次清晰和组件化的代码能更便于单元测试。例如,可以通过tubbing、mock DAO或Repository接口对服务层对象进行测试,而无需在运行单元测试时访问持久化数据。
真正的单元测试一般都运行得飞快,因为在运行时无需再作配置。将这种真正的单元测试作为开发方法的一部分能提高开发者的效率。也许你无需阅读“测试”这一章节来帮助你编写基于IoC的单元测试。但是,对于某些单元测试方案,Sping框架提供了以下mock对象和测试支持类。

14.1 mock对象

14.1.1 环境

org.springframework.mock.env包包含环境和PropertySource抽象的mock实现(请参看第7.13.1节“bean定义的profiles”和第7.13.2节“PropertySource抽象”)。MockEnvironmentMockPropertySource对于开发依赖于环境特定属性的代码的外测试非常有用。

14.1.2 JNDI

org.springframework.mock.jndi包中包含JNDI SPI的实现,开发者可以使用该实现为测试套件或独立应用程序设置简单的JNDI环境。例如,如果JDBC DataSources在测试代码与Java EE容器中的JNDI名称绑定到相同的名称,那么可以在测试场景中复用应用程序代码和配置,而无需进行修改。

14.1.3 Servlet API

org.springframework.mock.web包包含一组全面的Servlet API mock对象,这些对象有用于测试Web上下文、控制器和过滤器。这些mock对象是针对Spring Web MVC框架使用的,通常比动态mock对象(例如easymock)或其他Servlet API mock对象(例如MockObjects)更方便。从Spring 4.0框架开始, org.springframework.mock.web包中的一组mock基于Servlet 3.0 API。
有关Spring MVC和REST控制器与Spring MVC的WebApplicationContext配置进行全面集成测试,请参看Spring MVC Test Framework(第15.6节)。

14.2 单元测试支持类

14.2.1 通用的测试工具

org.springframework.test.util包包含一些用于单元和集成测试的通用工具。
ReflectionTestUtils是基于反射的工具方法集合。开发者在测试需要更改常量值、设置非公共字段、调用非公共 setter 方法或调用非公共配置或生命周期回调方法的场景中,在涉及测试用例的应用程序代码时,都可以使用这些方法。

  1. ORM框架(例如JPA和Hibernate)用到private或protected的字段访问,而不是在公共的setter方法设置实体属性。
  2. Spring对注解的支持(例如@Autowired、@Inject和@Resource等)为声明为private或protected的字段、setter方法和配置方法提供依赖注入。
  3. 使用注解(例如@PostConstruct和@PreDestroy等)用于生命周期的回调方法。

AopTestUtils是与AOP相关的工具方法集合。这些方法可用于获取对隐藏在一个或多个Spring代理后面的底层目标对象的引用。例如,如果已经使用EasyMock或Mockito等库将bean配置为动态mock,并且包装在Spring代理中,当需要直接访问它们判断配置是否正确或执行验证时,这些方法就派上用场。有关Spring的核心AOP实用工具,请参看AopUtilsAopProxyUtils

14.2.2 Spring MVC

org.springframework.test.web包包含ModelAndViewAssert,开发者可以将它配合JUnitTestNG或其他测试框架一起使用,用于处理Spring MVC ModelAndView对象的单元测试。

提示:如果想将Spring MVC Controller作为POJO进行单元测试,请在Spring的Servlet API Mocks(第14.1.3节)中将ModelAndViewAssert配合 MockHttpServletRequestMockHttpSession等框架一起使用。有关Spring MVC和REST控制器与Spring MVC的 WebApplicationContext配置进行全面集成测试,请改用Spring MVC测试框架(第15.6节)。

你可能感兴趣的:(Spring)