Spring Boot单元测试介绍 注解的使用方法

需要使用Spring Boot的测试,首先需要在pom中加入如下依赖:
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
	</dependency>
测试范围依赖

提供以下测试库:

  • JUnit,标准的单元测试java应用。

  • Spring Test & Spring Boot Test,Spring Boot应用程序的单元测试。

  • Mockito,Java
    moking框架,用于模拟任何Spring管理的Bean。比如在单元测试中模拟一个第三方系统Service接口返回的数据,而不会真正去调用第三方系统。

  • AssertJ,一个流畅的assertion库,同时也提供了更多的期望值与测试返回值的比较方式。

  • Hamcrest,库的匹配对象。

  • JSONassert,对JSON对象或者JSON字符串断言的库。

  • JsonPath,提供类似XPath那样的符号来获取JSON数据片段。 这些通常是我们在编写测试时普遍用到的库。

Spring使用一系列注解来增强单元测试以支持Spring Boot测试。

  • @RunWith:是JUmit标准的一个注解,用来告诉JUmit单元测试框架不要使用內置的方式进行单元测试,应该使用RunWith指明的类来提供单元测试,所有的Spring单元测试总是使用SpringRunner.class.
  • @SpringBootTest用于Spring Boot应用测试,它默认会根据包名逐级往上找,一直找到Spring
    Boot主程序,通过类注解是否包含@SpringBootApplication来判断是否主程序,并在测试的时候启动该类来创建Spring上下文环境。

注:Spring单元测试不会在每个单元测试方法前都启动一个全新的Spring上下文,因为这样太耗时,Spring单元测试会缓存上下文环境,以提供给每个单元测试方法。如果你的单元测试方法改变了上下文环境,比如更改了Bean定义,你需要在此单元测试方法上加上@DirtiesContext重新加载Spring上下文。

测试Service
  1. Spring Boot单元测试默认会在单元测试方法运行结束后进行事务回滚。
  2. Spring Boot会集成Mockito来模拟未完成的Service类。
  3. Spring Boot引入了@Sql,在测试前执行一系列的Sql脚本来初始化数据。
  4. 注解@MockBean可以自动注入Spring管理的Service,用来提供模式实现
测试MVC

Spring Boot可以单独测试Controller代码,用来验证与Controller相关的URL路径映射、文件上传、参数绑定等特性。

  • @WebMvcTest表示这是一个MVC测试,其参数可以传入多个待测试的Controller类。
  • MockMvc是Spring提供的专门用于测试Spring MVC类。
  • @MockBean用来模拟实现,因为在Spring MVC测试中,Spring容器并不会初始化@Service注解的类,因此我们需要模拟Controller调用所有Service。
  • perform完成一次MVC调用,Spring MVC Test是Servlet容器內的一种模拟测试,实际上并不会发起一次真正的HTTP调用。
  • andExpect表示请求期望的返回结果,比如返回的內容或者HTTP响应等。

注:在Spring MVC Test中带有@Service、@Component的类不会自动被扫描注册为Spring容器管理的Bean。
Mock用来在Serlvet容器內对Controller进行单元测试,并非发起了HTTP请求调用Controller。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值