📜  Spring Boot-单元测试用例(1)

📅  最后修改于: 2023-12-03 15:20:12.957000             🧑  作者: Mango

Spring Boot 单元测试用例

在软件开发过程中,我们必须保证代码的质量和稳健性。其中一种测试方法就是单元测试。

Spring Boot 提供了一种简单而强大的单元测试方案,可以帮助我们快速地验证代码的正确性。

本文将介绍 Spring Boot 单元测试用例的使用方法和常见场景。

安装依赖

首先,我们需要添加以下依赖到项目的 pom.xml 文件中:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
</dependency>

这些依赖包含了 Spring Boot 的测试框架和一些常用的测试工具。

编写测试用例

接下来,我们可以编写自己的测试用例。比如,我们有一个计算器服务,可以实现加法和乘法运算。

在测试代码中,我们需要使用注解 @SpringBootTest 来标记该测试用例要启动 Spring Boot 应用程序。

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class CalculatorServiceTests {

    @Autowired
    private CalculatorService calculatorService;

    @Test
    public void testAdd() {
        Assertions.assertEquals(3, calculatorService.add(1, 2));
    }

    @Test
    public void testMultiply() {
        Assertions.assertEquals(6, calculatorService.multiply(2, 3));
    }

}

在上面的代码中,我们使用了 Assertions.assertEquals 方法来断言运算的结果。

测试边界条件

除了基本的测试用例,我们还需要测试一些边界条件。

比如,在上面的测试中,我们可以添加一些特殊数字的测试用例:

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class CalculatorServiceTests {

    @Autowired
    private CalculatorService calculatorService;

    @Test
    public void testAdd() {
        Assertions.assertEquals(3, calculatorService.add(1, 2));
        Assertions.assertEquals(-1, calculatorService.add(-2, 1));
        Assertions.assertEquals(0, calculatorService.add(0, 0));
    }

    @Test
    public void testMultiply() {
        Assertions.assertEquals(6, calculatorService.multiply(2, 3));
        Assertions.assertEquals(0, calculatorService.multiply(0, 1));
        Assertions.assertEquals(-6, calculatorService.multiply(-2, 3));
    }

}

这些测试用例可以覆盖更多的场景和情况。

使用 Mock 对象

在测试中,有些场景无法轻易地实现或者依赖于外部服务,我们可以使用 Mock 对象模拟这些场景。

比如,在上面的例子中,我们需要依赖一个外部服务来计算加法和乘法运算。我们可以使用 Mockito 模拟这个服务。

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class CalculatorServiceTests {

    @Mock
    private ExternalService externalService;

    @Autowired
    private CalculatorService calculatorService;

    @BeforeEach
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        Mockito.when(externalService.add(Mockito.anyInt(), Mockito.anyInt())).thenReturn(3);
        Mockito.when(externalService.multiply(Mockito.anyInt(), Mockito.anyInt())).thenReturn(6);
        calculatorService.setExternalService(externalService);
    }

    @Test
    public void testAdd() {
        Assertions.assertEquals(3, calculatorService.add(1, 2));
    }

    @Test
    public void testMultiply() {
        Assertions.assertEquals(6, calculatorService.multiply(2, 3));
    }

}

在上面的代码中,我们创建了一个 ExternalService 的 Mock 对象,并在测试开始前设置了它的行为,然后将它传递给 CalculatorService。

这样,我们就可以轻松地测试 CalculatorService 的行为和逻辑。

结论

使用 Spring Boot 单元测试框架,我们可以快速编写和运行测试用例,在保证代码质量和稳健性的同时,提高开发效率。

除了提高代码质量,单元测试还可以在代码变更后,快速发现潜在问题,让产品更加健壮和可靠。