Spring Boot单元测试

时间:2025-02-12 08:18:09

Spring Boot单元测试

    • 一、Spring Boot单元测试相关依赖
    • 二、Spring Boot单元测试常用注解
    • 三、Spring Boot单元测试使用步骤
      • 1. 创建待测试类
      • 2. 添加必要的注解
      • 3. 注入依赖
      • 4. 编写测试方法
      • 5. 运行测试

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

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

  1. Spring Boot Test:提供了用于编写单元测试的支持
<dependency>
    <groupId></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></groupId>
    <artifactId>mockito-core</artifactId>
    <version>3.11.2</version>
    <scope>test</scope>
</dependency>

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

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

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

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

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

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

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

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

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

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

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

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

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

      • :使用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() 注解标记测试运行器,以便在测试时自动加载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单元测试就介绍到这里啦。欢迎小伙伴们点赞、评论、收藏!!!