Spring核心篇章:html
Spring 5 中文解析核心篇-IoC容器之依赖关系react
Spring 5 中文解析核心篇-IoC容器之Bean做用域git
Spring 5 中文解析核心篇-IoC容器之自定义Bean性质web
Spring 5 中文解析核心篇-IoC容器之BeanDefinition继承与容器拓展点spring
Spring 5 中文解析核心篇-IoC容器之基于注解的容器配置编程
Spring 5 中文解析核心篇-IoC容器之类路径扫描和组件管理api
Spring 5 中文解析核心篇-IoC容器之JSR330标准注解spring-mvc
Spring 5 中文解析核心篇-IoC容器之基于Java容器配置服务器
Spring 5 中文解析核心篇-IoC容器之Environment抽象
Spring 5 中文解析核心篇-IoC容器之ApplicationContext与BeanFactory
Spring 5 中文解析核心篇-IoC容器之Resources
Spring 5 中文解析核心篇-IoC容器之数据校验、数据绑定和类型转换
Spring 5 中文解析核心篇-IoC容器之SpEL表达式
Spring 5 中文解析核心篇-IoC容器之AOP编程(上)")
Spring 5 中文解析核心篇-IoC容器之AOP编程(下)")
Spring 5 中文解析核心篇-IoC容器之Spring AOP API
完整电子书地址
前面Spring核心已经完结请查看前面文章。接下来咱们继续Spring中的测试篇。
本章介绍了Spring对集成测试的支持以及单元测试的最佳实践。Spring团队提倡测试驱动开发(TDD)。Spring的团队发现,正确使用控制反转(IoC)的确是简化单元测试和集成测试(setter方法和适当的构造函数类的存在使他们更容易链接在一块儿测试,而无需创建服务定位器注册中心和相似的结构)。
测试是企业软件开发的组成部分。本章重点介绍IoC原则为单元测试带来的附加价值,以及Spring框架对集成测试的支持所带来的好处。(对企业中测试的完全处理不在本参考手册的范围以内。)
与传统的Java EE开发相比,依赖注入应该使你的代码对容器的依赖程度下降。组成应用程序的POJO应该能够在JUnit或TestNG测试中进行测试,而且可使用new运算符实例化对象,而无需使用Spring或任何其余容器。你可使用mock对象(结合其余有价值的测试技术)单独测试代码。若是你遵循Spring的体系结构建议,那么代码库的最终分层和组件化将使单元测试更加容易。例如,你能够经过存根或模拟DAO或存储库接口来测试服务层对象,而无需在运行单元测试时访问持久性数据。
真正的单元测试一般运行很是快,由于没有可设置的运行时基础架构。将真正的单元测试做为开发方法的一部分能够提升生产率。你可能不须要测试章节的这一部分来帮助你为基于ioc的应用程序编写有效的单元测试。然而,对一些单元测试场景,Spring框架提供了mock对象和测试支持类,它们在这个章节描述。
Spring包含许多专用于mock的包:
org.springframework.mock.env
包包含Environment
和PropertySource
抽象mock实现(请参阅Bean定义配置文件和PropertySource抽象)。MockEnvironment
和MockPropertySource
对于为依赖于特定环境属性的代码开发<u>容器外测试</u>很是有用。
org.springframework.mock.jndi
包包含JNDI SPI的部分实现,可用于为测试套件或独立应用程序设置简单的JNDI环境。例如,若是JDBC DataSource
实例在测试代码中与在Java EE容器中绑定到相同的JNDI名称,则能够在测试场景中重用应用程序代码和配置,而无需进行修改。
从Spring框架5.2开始,正式弃用了org.springframework.mock.jndi
包中的mock JNDI支持,而但愿使用第三方的完整解决方案,例如Simple-JNDI
。
org.springframework.mock.web
包包含一组全面的Servlet API模拟对象,这些对象对于测试Web上下文,控制器和过滤器很是有用。这些模拟对象是针对Spring的Web MVC框架使用的,一般比动态模拟对象(例如EasyMock
)或其余Servlet API模拟对象(例如MockObjects
)更方便使用。
从Spring框架5.0开始,
org.springframework.mock.web
中的模拟对象基于Servlet 4.0 API。
Spring MVC测试框架创建在模拟Servlet API对象的基础上,为Spring MVC提供了集成测试框架。参见Spring MVC测试框架。
org.springframework.mock.http.server.reactive
包包含ServerHttpRequest
和ServerHttpResponse
的mock实现,供WebFlux
应用程序使用。org.springframework.mock.web.server
包包含一个模拟ServerWebExchange
,它依赖于那些模拟请求和响应对象。
MockServerHttpRequest
和MockServerHttpResponse
都从与特定于服务器的实现相同的抽象基类扩展,并与它们共享行为。例如,模拟请求一旦建立即是不可变的,可是你可使用ServerHttpRequest
中的mutate()
方法来建立修改后的实例。
为了使模拟响应正确实现写契约并返回写完成句柄(即Mono <Void>),默认状况下,它使用带有Flux
的cache().then()
来对数据进行缓冲并使其可用于测试中的断言。应用程序能够设置自定义编写函数(例如,测试一个无限流)。
WebTestClient
创建在模拟请求和响应的基础上,为不使用HTTP服务器的WebFlux
应用程序测试提供支持。客户端还能够用于正在运行的服务器的端到端测试。
Spring包含许多能够帮助进行单元测试的类。它们分为两类:
org.springframework.test.util
包包含几个通用的实用程序用于单元测试和集成测试。
ReflectionTestUtils
是基于反射的实用程序方法的集合。在须要更改常量值、设置非公共字段、调用非公共setter方法或调用非公共配置或生命周期回调方法的测试场景中,你可使用这些方法
private
或protected
的字段访问,而不是域实体中的属性的public
setter
方法。@Autowired
、@Inject
和@Resource
),这些注解为private
或protected
的字段,setter
方法和配置方法提供依赖项注入。@PostConstruct
和@PreDestroy
之类的注解用于生命周期回调方法。AopTestUtils是与AOP相关的实用程序方法的集合。你可使用这些方法来获取对隐藏在一个或多个Spring代理后面的基础目标对象的引用。例如,若是你已经经过使用库(如EasyMock
或Mockito
)将bean配置为动态mock
,而且该mock
包装在Spring代理中,那么你可能须要直接访问底层的mock
,以在其上配置指望并执行验证。有关Spring的核心AOP实用程序,请参阅AopUtils和AopProxyUtils。
org.springframework.test.web
包包含ModelAndViewAssert
,你能够将其与JUnit、TestNG或任何其余测试框架结合使用,以进行处理Spring MVC ModelAndView
对象的单元测试。
单元测试Spring MVC控制器要对做为POJO的Spring MVC
Controller
类进行单元测试,请将ModelAndViewAssert
与Spring的Servlet API模拟中的MockHttpServletRequest
、MockHttpSession
等结合使用。为了与Spring MVC的WebApplicationContext
配置一块儿对Spring MVC和RESTController
类进行全面的集成测试,请改用Spring MVC测试框架。
我的从事金融行业,就任过易极付、思建科技、某网约车平台等重庆一流技术团队,目前就任于某银行负责统一支付系统建设。自身对金融行业有强烈的爱好。同时也实践大数据、数据存储、自动化集成和部署、分布式微服务、响应式编程、人工智能等领域。同时也热衷于技术分享创立公众号和博客站点对知识体系进行分享。关注公众号: 青年IT男 获取最新技术文章推送!
博客地址: http://youngitman.tech
CSDN: https://blog.csdn.net/liyong1...
微信公众号:
技术交流群: