springboot 单元测试

Spring Boot 单元测试是确保代码质量的重要部分,它允许我们在不实际启动整个应用的情况下测试我们的代码。在Spring Boot中,我们通常使用Spring Test模块和JUnit测试框架来编写单元测试。以下是一个简单的Spring Boot单元测试的详细代码介绍:

首先,假设我们有一个简单的UserService,它有一个findUserById方法:

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public User findUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }
}

接下来,我们将为UserService编写单元测试:

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Optional;

import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;

@ExtendWith(MockitoExtension.class)
@SpringBootTest
public class UserServiceTest {

    @Mock
    private UserRepository userRepository;

    @InjectMocks
    private UserService userService;

    private User user;

    @BeforeEach
    void setUp() {
        user = new User();
        user.setId(1L);
        user.setName("Test User");
    }

    @Test
    void findUserById_UserExists_ReturnsUser() {
        // Arrange
        when(userRepository.findById(1L)).thenReturn(Optional.of(user));

        // Act
        User foundUser = userService.findUserById(1L);

        // Assert
        assertNotNull(foundUser);
        assertEquals(user.getId(), foundUser.getId());
        assertEquals(user.getName(), foundUser.getName());
        verify(userRepository).findById(1L);
    }

    @Test
    void findUserById_UserDoesNotExist_ReturnsNull() {
        // Arrange
        when(userRepository.findById(2L)).thenReturn(Optional.empty());

        // Act
        User foundUser = userService.findUserById(2L);

        // Assert
        assertNull(foundUser);
        verify(userRepository).findById(2L);
    }
}

在上面的代码中,我们使用了Mockito库来模拟UserRepository的行为。@Mock注解用于创建UserRepository的模拟对象,而@InjectMocks注解则用于创建UserService的实例,并将模拟的UserRepository注入到其中。

setUp方法中,我们创建了一个User对象,用于后续的测试。

我们编写了两个测试用例:findUserById_UserExists_ReturnsUserfindUserById_UserDoesNotExist_ReturnsNull。在每个测试用例中,我们首先使用when方法来定义模拟的UserRepository的行为。然后,我们调用userService.findUserById方法来执行实际的测试。最后,我们使用断言来验证测试的结果是否符合预期。

注意,我们使用verify方法来验证UserRepositoryfindById方法是否被调用。这是一个好的实践,因为它可以确保我们的代码确实与模拟的对象进行了交互。

总的来说,Spring Boot的单元测试可以帮助我们确保代码的正确性,并在代码更改时提供及时的反馈。通过编写详细的测试用例,我们可以确保应用的各个部分都能正常工作,从而提高应用的质量和可靠性。

相关推荐

  1. 精通SpringBoot单元测试

    2024-03-23 12:44:01       20 阅读
  2. springboot 单元测试

    2024-03-23 12:44:01       17 阅读
  3. SpringBoot单元测试剖析

    2024-03-23 12:44:01       17 阅读
  4. SpringBoot单元测试

    2024-03-23 12:44:01       16 阅读
  5. SpringBoot单元测试

    2024-03-23 12:44:01       19 阅读
  6. springboot集成mybatis 单元测试

    2024-03-23 12:44:01       9 阅读
  7. SpringBoot异常处理和单元测试

    2024-03-23 12:44:01       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-23 12:44:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-23 12:44:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-23 12:44:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-23 12:44:01       20 阅读

热门阅读

  1. 富格林:重视平台挑选阻挠虚假

    2024-03-23 12:44:01       20 阅读
  2. 工作量证明机制

    2024-03-23 12:44:01       21 阅读
  3. python课程学习代码:调用接口

    2024-03-23 12:44:01       17 阅读
  4. pytorch中的梯度裁剪

    2024-03-23 12:44:01       21 阅读
  5. 【科普向】什么是数据湖架构

    2024-03-23 12:44:01       19 阅读
  6. LeetCode的LRU缓存实现

    2024-03-23 12:44:01       15 阅读
  7. 69、FIFO缓存发送数据(先入先出)

    2024-03-23 12:44:01       17 阅读
  8. ubuntu生成 设置 core文件

    2024-03-23 12:44:01       20 阅读
  9. Vue 常见面试题(一)

    2024-03-23 12:44:01       17 阅读
  10. 0x01_实验课leetcode

    2024-03-23 12:44:01       18 阅读
  11. [leetcode] 21. 合并两个有序链表

    2024-03-23 12:44:01       17 阅读
  12. 数学系的数字信号处理:傅立叶变换

    2024-03-23 12:44:01       16 阅读
  13. android gdb 调试

    2024-03-23 12:44:01       21 阅读
  14. Android_NDK调试

    2024-03-23 12:44:01       17 阅读