手机网站建设进度,环境设计排版素材网站,网站建设包含二级网站,苏州电子商务网站建设Spring框架提供了很多注解来辅助完成单元测试和集成测试(备注#xff1a;这里的集成测试指容器内部的集成测试#xff0c;非系统间的集成测试)#xff0c;先看看Spring框架提供了哪些注解以及对应的作用。RunWith(SpringRunner.class) / ExtendWith(SpringExtension.class)这里的集成测试指容器内部的集成测试非系统间的集成测试)先看看Spring框架提供了哪些注解以及对应的作用。RunWith(SpringRunner.class) / ExtendWith(SpringExtension.class) 用于在测试类中启用 Spring 框架的支持。RunWith 是 JUnit 4 的注解而 ExtendWith 是 JUnit 5 的注解用于取代 RunWith。 这些注解会加载 Spring 上下文支持 Spring 相关的功能如依赖注入和使用 Spring 注解等。SpringBootTest 用于在测试类中加载完整的 Spring Boot 应用程序上下文。自动配置应用程序上下文包括所有的配置、Bean 和组件以及所有相关的依赖项。通常与 RunWith 或 ExtendWith 一起使用。AutoConfigureMockMvc 自动配置 MockMvc 对象用于模拟 Spring MVC 请求和响应。通常与 SpringBootTest 结合使用用于测试 MVC 控制器层的行为。DataJpaTest 用于测试与 JPA 相关的功能。自动配置嵌入式数据库并加载与 JPA 相关的组件。仅加载 JPA 相关的组件提高测试的精确性和速度。WebMvcTest 用于测试 Spring MVC 控制器层的功能。自动配置 MockMvc并加载控制器层相关的组件如控制器、拦截器等。通常需要手动指定需要加载的其他组件。DataMongoTest 用于测试与 MongoDB 相关的功能。自动配置嵌入式 MongoDB并加载与 MongoDB 相关的组件。RestClientTest 用于测试使用 Spring 的 RestTemplate 进行 HTTP 请求的功能。自动配置 RestTemplateBuilder并加载相关的组件。Sql 用于在测试执行前或执行后运行 SQL 脚本。可以用于准备测试数据或清理测试环境。TestPropertySource 用于在测试中指定要加载的属性文件。可以覆盖应用程序中的属性配置方便测试不同的配置。
可以看到在上面的注解中AutoConfigureMockMvc和WebMvcTest都是用于测试Controller层的测试那么他们之间有什么区别呢AutoConfigureMockMvc 用于单元测试或轻量级的集成测试只自动配置 MockMvc主要关注控制器的行为测试。WebMvcTest 用于集成测试除了自动配置 MockMvc还会加载控制器层相关的组件可以测试整个控制器层的功能和交互。
上面是一些概念介绍下面看看具体例子。如下图所示controller层中有一个post方法为这个post方法编写单元测试里面用的了mockMvc注解。对于Controller class依赖的usersService Class下面的测试中用了MockBean注解这样可以在后面控制usersService的行为例如 given(userService.createUser(any(UserDto.class))).willReturn(userDto);因为对userService的行为进行的stub这样controller层方法返回的结果也是受控制的在后面的单元测试中就隔离了对usersService实际结果的依赖只测试controller层的代码逻辑。 为了更好的理解mockMvc可以再看下面一个更简单的例子下面例子中左边是一个BookController的假代码右边是对这个Controller的单元测试代码。class上面使用WebMvcTest注解用MockBean管理依赖的服务bookService用mockMvc模拟发起请求接着通过.andExpect()验证得到的结果是否符合预期。 上面是编写单元测试如果要为controller层的接口编写容器内的集成测试呢具体测试如下所示集成测试中会用到SpringBootTest注解用restTemplate在启动的本地端口上调用controller层的接口然后校验接口返回内容。 除了controller层的单元测试和集成测试我们再来看看spring框架提供的其他常用注解使用例子。如下图所示使用DataMongoTest注解编写Repository层class的单元测试使用DataMongoTest 注解它会加载 BookRepository 相关的组件并创建一个嵌入式 MongoDB 数据库。另外还使用了 TestPropertySource 注解来指定 MongoDB 的连接属性这样测试可以连接到指定的数据库。 需要注意在实际项目DB层通常都有现成的框架来负责数据的CRUD例如spring jpa等自身写的额外查询、修改数据的逻辑较少如果要为repository层编写单元测试应该重点对定制化了sql语句的repository层代码。
和MongoTestdata注解类似的还有DataJpaTest注解DataJpaTest是 Spring Boot 测试框架中用于测试与 JPA 相关的功能的注解。它提供了一个轻量级的方式来测试 JPA 数据访问层Repository的功能而不需要加载整个 Spring Boot 应用程序上下文。下图是使用DataJpaTest注解为Repository层代码添加单元测试例子。 使用了DataJpaTest注解它会加载BookRepository相关的组件并创建一个嵌入式数据库H2 数据库。另外还使用了 TestPropertySource 注解来指定数据库的连接属性这样测试可以连接到指定的数据库。需要注意一点因为这个注解是专门为Spring Jpa框架创建的如果数据库选的框架不是spring jpa那么则无法使用DataJpaTest注解。
除了前面数据库相关的注解外再来看看如何使用RestClientTest注解。下图是使用RestClientTest注解为使用了restTemplate调用外部接口的代码添加单元测试使用了 RestClientTest(BookClient.class) 注解它会加载 BookClient 相关的组件并创建一个带有 MockRestServiceServer的RestTemplate 实例。MockRestServiceServer 可以用于模拟外部 REST 服务的响应从而测试 BookClient 与外部服务的交互。 以上就是Spring框架提供的常用测试相关注解的使用说明。