阅读spring test文档
This commit is contained in:
65
spring/spring test/SpringTest.md
Normal file
65
spring/spring test/SpringTest.md
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
# Spirng Test
|
||||||
|
## Unit Test
|
||||||
|
### Introduce
|
||||||
|
在运行单元测试时,无需实际启动容器,可以通过`mock objects`的方式来独立的对代码进行测试。故而,单元测试通常运行的十分快。
|
||||||
|
|
||||||
|
### Mock Objects
|
||||||
|
spring包含如下专门用于`mock`的包
|
||||||
|
- Environment
|
||||||
|
- JNDI
|
||||||
|
- Servlet API
|
||||||
|
- Spring Web Reactive
|
||||||
|
|
||||||
|
#### Environment
|
||||||
|
`org.springframework.mock.env`包中包含`Environment`和`PropertySource`抽象类的实现。在编写针对依赖环境变量代码的测试时,`MockEnvironment`和`MockPropertySource`将会非常有用。
|
||||||
|
|
||||||
|
#### JNDI
|
||||||
|
`org.springframework.mock.jndi`包中包含`JNDI SPI`的部分实现,因而,可以建立一个简单的JNDI环境。
|
||||||
|
|
||||||
|
#### Servlet API
|
||||||
|
`org.springframework.mock.web`包中包含一整套`servlet api mock object`,这些mock object针对spring web mvc框架使用。
|
||||||
|
|
||||||
|
### Unit Test Support Class
|
||||||
|
spring中包含一系列类来帮助单元测试:
|
||||||
|
- 通用测试组件
|
||||||
|
- spring mvc测试组件
|
||||||
|
|
||||||
|
#### 通用测试组件
|
||||||
|
`org.springframework.test.util`中包含一系列类用于单元测试和集成测试。
|
||||||
|
|
||||||
|
`AopTestUtils`中拥有一系列aop相关的方法。可以通过AopTestUtils中的方法获取隐藏在一层或多层代理下的`target`对象。
|
||||||
|
|
||||||
|
`ReflectionTestUtils`中拥有一系列反射相关的方法,可以通过ReflectionTestUtils中的方法修改常量值、访问非public的field或method。通常,ReflectionTestUtils可用于如下场景:
|
||||||
|
- ORM框架中针对protected或private filed的访问
|
||||||
|
- spring注解(@Autowired、@Inject,@Resource,@PostConstruct)中对于类中非公有成员的访问
|
||||||
|
|
||||||
|
`TestSocketUtils`可以查找本地可以连接的TCP端口,通常用于集成测试。
|
||||||
|
|
||||||
|
#### spring mvc测试组件
|
||||||
|
`org.springframework.test.web`包包含了`ModelAndViewAssert`.
|
||||||
|
|
||||||
|
## 集成测试
|
||||||
|
集成测试拥有如下特性:
|
||||||
|
- 通过spring上下文正确注入
|
||||||
|
- 可以通过JDBC或ORM工具进行数据库访问
|
||||||
|
|
||||||
|
集成测试会实际启动spring容器,故而速度要比单元测试慢。
|
||||||
|
|
||||||
|
### 集成测试主要目标
|
||||||
|
集成测试主要支持如下目标:
|
||||||
|
- 在测试之间管理ioc容器缓存
|
||||||
|
- 在测试时提供依赖注入
|
||||||
|
- 在集成测试时提供事务管理
|
||||||
|
- 在编写集成测试时提供spring相关的类
|
||||||
|
|
||||||
|
### Context Management and Caching
|
||||||
|
spring TestContext framework支持一致导入`ApplicationContext`和`WebApplicationContext`,并针对这些context做缓存。
|
||||||
|
|
||||||
|
> 支持对于已导入上下文的缓存是很重要的,因为spring实例化对象时花费的时间会很长。故而,如果针对每个测试的每个test fixture之前,都会加载对象的开销。
|
||||||
|
|
||||||
|
默认情况下,一旦`ApplicationContext`导入,那么每个test都会复用导入的上下文。故而,每个test suite都只会有一次导入开销,并且后续测试的执行要快得多。其中,`test suite`代表运行在相同jvm中的所有测试,
|
||||||
|
|
||||||
|
|
||||||
|
### Test Fixtures依赖注入
|
||||||
|
当TestContext framework导入应用上下文时,其可以针对test class使用依赖注入。并且,可以跨测试场景重复使用应用程序上下文,避免在独立的测试用例之间重复执行fixture设置。
|
||||||
|
|
||||||
Reference in New Issue
Block a user