Spring Boot单元测试

  
Spring Boot单元测试是用于测试应用程序中各个单元(如方法、类)是否按预期工作的测试方法,下面我们从Spring Boot单元测试相关依赖、Spring Boot单元测试常用注解以及Spring Boot单元测试使用步骤详细介绍一下这个可以大大提高工作效率的测试工具吧。

一、Spring Boot单元测试相关依赖

  1. Spring Boot Test:提供了用于编写单元测试的支持
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
  1. JUnit:用于编写和运行单元测试的框架。
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>
  1. Mockito:用于模拟对象帮助进行单元测试的框架。
<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>3.11.2</version>
    <scope>test</scope>
</dependency>

这些依赖添加到项目的 pom.xml 文件中。

二、Spring Boot单元测试常用注解

接下来我们来看看,在测试的时候会经常使用到的注解以及它们的用法和含义。

  • @RunWith: @RunWith 注解用于指定测试运行器,可以通过不同的参数配置来选择不同的运行器,有以下属性值进行指定:

    • SpringRunner.class:这是Spring框架提供的测试运行器,用于在测试时加载Spring应用程序上下文,以便进行Spring相关组件的测试。

    • BlockJUnit4ClassRunner.class:这是JUnit4提供的默认测试运行器,用于运行JUnit4的测试用例。

    • Parameterized.class:用于运行参数化测试,允许多次运行同一个测试用例,每次运行时使用不同的参数。

    • Suite.class:用于组织多个测试类,可以一起运行多个测试类。

    • MockitoJUnitRunner.class:Mockito框架提供的测试运行器,用于在测试中使用Mockito进行对象模拟

    • PowerMockRunner.classPowerMock框架提供的测试运行器,用于扩展Mockito和EasyMock等框架的功能,支持更多的测试场景。

  • @SpringBootTest:用于指定要加载的Spring Boot应用程序上下文,通常与 classes 、 webEnvironment 等属性一起使用,常见的属性值如下:

    • classes:用于指定要加载的配置类,可以通过指定一个或多个配置类来加载Spring应用程序上下文。

    • webEnvironment:用于指定Web环境的类型,有三种取值:

      • WebEnvironment.MOCK :使用Mock Servlet环境,不启动Web服务器。
      • WebEnvironment.RANDOM_PORT :随机端口,启动内嵌的Servlet容器。
      • WebEnvironment.DEFINED_PORT :使用指定端口,启动内嵌的Servlet容器。
    • properties:用于指定配置属性,可以通过 key=value 的形式设置Spring Boot应用程序的属性。

    • initializers:用于指定初始化器,可以在Spring应用程序上下文创建之前执行一些初始化操作。

    • value:与 classes 属性类似,用于指定要加载的配置类,可以通过数组形式指定多个配置类。

    • inheritLocations:用于指定是否继承父类的资源位置,默认为 true 。

    • inheritInitializers:用于指定是否继承父类的初始化器,默认为 true 。

    • listeners:用于指定要注册的应用程序监听器,可以通过数组形式指定多个监听器。

  • @MockBean:用于创建一个模拟对象,通常用于替代真实的Bean,以便进行单元测试。

  • @Autowired:用于将Bean注入到测试类中。

  • @Mock:用于创建一个模拟对象,通常与Mockito框架一起使用。

  • @Spy:用于创建一个Spy对象,可以部分模拟真实对象的行为。

  • @InjectMocks:用于注入依赖,通常与Mockito框架一起使用,代码如下:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;

@RunWith(MockitoJUnitRunner.class)
public class CalculatorServiceTest {

  @InjectMocks
  private CalculatorService calculatorService;

  @Test
  public void testAdd() {
      int a = 5;
      int b = 3;

      int result = calculatorService.add(a, b);

      assertEquals(8, result);
  }
}
  • @Before:在每个测试方法运行之前执行的方法。

  • @After:在每个测试方法运行之后执行的方法。

  • @Test:用于标记测试方法。

三、Spring Boot单元测试使用步骤

1. 创建待测试类

编写一个待测试类,并定义一些需要进行单元测试的业务方法。

public class TestService {
    
    public int add(int a, int b) {
        return a + b;
    }
}

2. 添加必要的注解

使用 @RunWith(SpringRunner.class) 注解标记测试运行器,以便在测试时自动加载Spring应用程序上下文。

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import static org.junit.Assert.assertEquals;

@RunWith(SpringRunner.class)
@SpringBootTest
public class  AddServiceTest {

3. 注入依赖

使用 @Autowired 注解将需要测试的类注入到测试类中。

@Autowired
    private TestService  testService;

4. 编写测试方法

编写测试方法,使用JUnit的断言方法验证代码逻辑是否按预期执行。

 @Test
   public void testAdd() {
       int a = 5;
       int b = 3;
       int result = calculatorService.add(a, b);
   }

5. 运行测试

运行单元测试,检查测试结果。

        assertEquals(8, result);

完整代码如下:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import static org.junit.Assert.assertEquals;

@RunWith(SpringRunner.class)
@SpringBootTest
public class CalculatorServiceTest {

   @Autowired
   private CalculatorService calculatorService;

   @Test
   public void testAdd() {
       
       int a = 5;
       int b = 3;

      
       int result = calculatorService.add(a, b);

       
       assertEquals(8, result);
   }
}

好了,本篇Spring Boot单元测试就介绍到这里啦。欢迎小伙伴们点赞、评论、收藏!!!

  • 21
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本项目示例基于spring boot 最新版本(2.1.9)实现,Spring BootSpring Cloud 学习示例,将持续更新…… 在基于Spring BootSpring Cloud 分布微服务开发过程中,根据实际项目环境,需要选择、集成符合项目需求的各种组件和积累各种解决方案。基于这样的背景下,我开源了本示例项目,方便大家快速上手Spring BootSpring Cloud 。 每个示例都带有详细的介绍文档、作者在使用过程中踩过的坑、解决方案及参考资料,方便快速上手为你提供学习捷径,少绕弯路,提高开发效率。 有需要写关于spring bootspring cloud示例,可以给我提issue哦 ## 项目介绍 spring boot demo 是一个Spring BootSpring Cloud的项目示例,根据市场主流的后端技术,共集成了30+个demo,未来将持续更新。该项目包含helloworld(快速入门)、web(ssh项目快速搭建)、aop(切面编程)、data-redis(redis缓存)、quartz(集群任务实现)、shiro(权限管理)、oauth2(四种认证模式)、shign(接口参数防篡改重放)、encoder(用户密码设计)、actuator(服务监控)、cloud-config(配置中心)、cloud-gateway(服务网关)、email(邮件发送)、cloud-alibaba(微服务全家桶)等模块 ### 开发环境 - JDK1.8 + - Maven 3.5 + - IntelliJ IDEA ULTIMATE 2019.1 - MySql 5.7 + ### Spring Boot 模块 模块名称|主要内容 ---|--- helloworld|[spring mvc,Spring Boot项目创建,单元测试](https://github.com/smltq/spring-boot-demo/blob/master/helloworld/HELP.md) web|[ssh项目,spring mvc,过滤器,拦截器,监视器,thymeleaf,lombok,jquery,bootstrap,mysql](https://github.com/smltq/spring-boot-demo/blob/master/web/HELP.md) aop|[aop,正则,前置通知,后置通知,环绕通知](https://github.com/smltq/spring-boot-demo/blob/master/aop/HELP.md) data-redis|[lettuce,redis,session redis,YAML配置,连接池,对象存储](https://github.com/smltq/spring-boot-demo/blob/master/data-redis/HELP.md) quartz|[Spring Scheduler,Quartz,分布式调度,集群,mysql持久化等](https://github.com/smltq/spring-boot-demo/blob/master/quartz/HELP.md) shiro|[授权、认证、加解密、统一异常处理](https://github.com/smltq/spring-boot-demo/blob/master/shiro/HELP.md) sign|[防篡改、防重放、文档自动生成](https://github.com/smltq/spring-boot-demo/blob/master/sign/HELP.md) security|[授权、认证、加解密、mybatis plus使用](https://github.com/smltq/spring-boot-demo/blob/master/security/HELP.md) mybatis-plus-generator|[基于mybatisplus代码自动生成](https://github.com/smltq/spring-boot-demo/blob/master/mybatis-plus-generator) mybatis-plus-crud|[基于mybatisplus实现数据库增、册、改、查](https://github.com/smltq/spring-boot-demo/blob/master/mybatis-plus-crud) encoder|[主流加密算法介绍、用户加密算法推荐](https://github.com/smltq/spring-boot-demo/blob/master/encoder/HELP.md) actuator|[autuator介绍](https://github.com/smltq/spring-boot-demo/blob/master/actuator/README.md) admin|[可视化服务监控、使用](https://github.com/smltq/spring-boot-demo/blob/master/admin/README.md) security-oauth2-credentials|[oauth2实现密码模式、客户端模式](https://github.com/smltq/spring-boot-demo/blob/master/security-oauth2-credentials/README.md) security-oauth2-auth-code|[基于spring boot实现oauth2授权模式](https://github.com/smltq/spring-boot-demo/blob/master/security-oauth2-auth-code/README.md) mybatis-multi-datasource|[mybatis、数据库集群、读写分离、读库负载均衡](https://github.com/smltq/spring-boot-demo/blob/master/mybatis-multi-datasource) template-thymeleaf|[thymeleaf实现应用国际化示例](https://github.com/smltq/spring-boot-demo/blob/master/template-thymeleaf) mq-redis|[redis之mq实现,发布订阅模式](https://github.com/smltq/spring-boot-demo/blob/master/mq-redis) email|[email实现邮件发送](https://github.com/smltq/spring-boot-demo/blob/master/email) jGit|[java调用git命令、jgit使用等](https://github.com/smltq/spring-boot-demo/blob/master/jGit) webmagic|[webmagic实现某电影网站爬虫示例](https://github.com/smltq/spring-boot-demo/blob/master/webmagic) netty|[基于BIO、NIO等tcp服务器搭建介绍](https://github.com/smltq/spring-boot-demo/blob/master/netty) ### Spring Cloud 模块 模块名称|主要内容 ---|--- cloud-oauth2-auth-code|[基于spring cloud实现oath2授权模式](https://github.com/smltq/spring-boot-demo/blob/master/cloud-oauth2-auth-code) cloud-gateway|[API主流网关、gateway快速上手](https://github.com/smltq/spring-boot-demo/blob/master/cloud-gateway) cloud-config|[配置中心(服务端、客户端)示例](https://github.com/smltq/spring-boot-demo/blob/master/cloud-config) cloud-feign|[Eureka服务注册中心、负载均衡、声明式服务调用](https://github.com/smltq/spring-boot-demo/blob/master/cloud-feign) cloud-hystrix|[Hystrix服务容错、异常处理、注册中心示例](https://github.com/smltq/spring-boot-demo/blob/master/cloud-hystrix) cloud-zuul|[zuul服务网关、过滤器、路由转发、服务降级、负载均衡](https://github.com/smltq/spring-boot-demo/blob/master/cloud-zuul) cloud-alibaba|[nacos服务中心、配置中心、限流等使用(系列示例整理中...)](https://github.com/smltq/spring-boot-demo/blob/master/cloud-alibaba) #### Spring Cloud Alibaba 模块 模块名称|主要内容 ---|--- nacos|[Spring Cloud Alibaba(一)如何使用nacos服务注册和发现](https://github.com/smltq/spring-boot-demo/blob/master/cloud-alibaba/README1.md) config|[Spring Cloud Alibaba(二)配置中心多项目、多配置文件、分目录实现](https://github.com/smltq/spring-boot-demo/blob/master/cloud-alibaba/README2.md) Sentinel|[Spring Cloud Alibaba(三)Sentinel之熔断降级](https://github.com/smltq/spring-boot-demo/blob/master/cloud-alibaba/README3.md) Dubbo|[Spring Cloud Alibaba(四)Spring Cloud与Dubbo的融合](https://github.com/smltq/spring-boot-demo/blob/master/cloud-alibaba/README4.md) RocketMQ|[Spring Cloud Alibaba(五)RocketMQ 异步通信实现](https://github.com/smltq/spring-boot-demo/blob/master/cloud-alibaba/README5.md) ### 其它 模块名称|主要内容 ---|--- leetcode|[力扣题解目录](https://github.com/smltq/spring-boot-demo/blob/master/leetcode) ## Spring Boot 概述 Spring Boot简化了基于Spring的应用开发,通过少量的代码就能创建一个独立的、产品级别的Spring应用。 Spring BootSpring平台及第三方库提供开箱即用的设置,这样你就可以有条不紊地开始。多数Spring Boot应用只需要很少的Spring配置。 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Sprin

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值