当前位置: 首页 > news >正文

Springboot中的单元测试该如何进行?

在 Spring Boot 应用程序中,单元测试是确保代码质量和功能正确性的关键部分。Mockito 是一个流行的Java测试框架,用于模拟(mocking)对象,使得编写单元测试更加容易和高效。本文将介绍如何在Spring Boot 应用程序中使用 Mockito 进行单元测试。

1. 添加依赖

spring-boot-starter-test已经包含了 Mockito 依赖,所以只需在pom.xml文件中添加:

 
  1.    <dependency>

  2.    <groupId>org.springframework.boot</groupId>

  3.    <artifactId>spring-boot-starter-test</artifactId>

  4.    <version>x.x.x</version> <!-- 使用对应版本 -->

  5.    <scope>test</scope>

  6.    </dependency>

2. 编写单元测试

假设我们有一个简单的服务类UserService:

 
  1.   @Service

  2.   public class UserService {

  3.    @Autowired

  4.    private UserRepository userRepository;

  5.    public String getUserRole(String username) {

  6.    User user = userRepository.findByUsername(username);

  7.    if (user != null) {

  8.    return user.getRole();

  9.    }

  10.    return null;

  11.    }

  12.   }

我们将使用 Mockito 来模拟UserRepository,而不是实际调用数据库。以下是单元测试的示例:

 
  1.   public class UserServiceTest {

  2.    @Mock

  3.    private UserRepository userRepository;

  4.    @InjectMocks

  5.    private UserService userService;

  6.    @Test

  7.    public void testGetUserRole() {

  8.    // 设置模拟的 UserRepository 行为

  9.    User mockUser = new User("testuser", "ROLE_USER");

  10.    Mockito.when(userRepository.findByUsername("testuser")).thenReturn(mockUser);

  11.    // 调用服务方法

  12.    String role = userService.getUserRole("testuser");

  13.    // 验证是否调用了 UserRepository 的 findByUsername 方法

  14.    Mockito.verify(userRepository).findByUsername("testuser");

  15.    // 验证结果

  16.    assertEquals("ROLE_USER", role);

  17.    }

  18.    @Test

  19.    public void testGetUserRole_UserNotFound() {

  20.    // 设置模拟的 UserRepository 行为

  21.    Mockito.when(userRepository.findByUsername("nonexistentuser")).thenReturn(null);

  22.    // 调用服务方法

  23.    String role = userService.getUserRole("nonexistentuser");

  24.    // 验证是否调用了 UserRepository 的 findByUsername 方法

  25.    Mockito.verify(userRepository).findByUsername("nonexistentuser");

  26.    // 验证结果

  27.    assertNull(role);

  28.    }

  29.   }

3. 解释

  ·@Mock:这个注解创建一个模拟对象。在本例中,我们模拟了UserRepository。

  · @InjectMocks:这个注解将Mock对象注入到被测试的对象中。在本例中,我们将模拟的UserRepository注入到UserService中。

  · Mockito.when().thenReturn():这个方法用于设置模拟对象的行为。我们告诉 Mockito 当调用userRepository.findByUsername()时应该返回什么值。

  · Mockito.verify(userRepository).findByUsername("testuser"):verify方法用来验证是否调用了模拟对象的特定方法,并且传入了期望的参数。

  · 最后,我们调用assert方法并验证返回结果是否符合预期。

4. 总结

通过使用Mockito,我们可以轻松地模拟外部依赖项,使得单元测试更加简单和可靠。在Spring Boot应用程序中,这对于测试业务逻辑而不依赖于外部资源(如数据库)至关重要。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   


http://www.mrgr.cn/news/69205.html

相关文章:

  • uniapp ios app以framwork形式接入sentry
  • STM32+AI语音识别智能家居系统
  • 开源三代示波器的高速波形刷新方案开源,支持VNC远程桌面,手机,Pad,电脑均可访问(2024-11-11)
  • skywalking各项指标说明
  • Timeline动画「硬切」的问题
  • 13.观察者模式设计思想
  • 【前端】Svelte:响应性声明
  • CODESYS V3.5工程信息查看器
  • 【数学二】线性代数-向量-正交规范化、正交矩阵
  • 羲和数据集收集器0.9
  • 探索App Intents:让你的应用与Siri无缝互动的新方式
  • 【linux系统】Linux系统调优的方法与技巧
  • 派对鹦鹉—Party Parrot
  • 【Windows】CMD命令学习——快捷键
  • 鸿蒙next版开发:ArkTS组件鼠标事件详解
  • 书生实战营第四期-基础岛第四关-InternLM + LlamaIndex RAG 实践
  • 【单片机程序】详解IO输入输出方向设置寄存器写法程序来自定义更换引脚与迁移参考程序到工程的流程
  • Google SERP API 对接说明
  • 2.索引:SQL 性能分析详解
  • 公司文件防止泄密的方式(如何防止技术泄密)?5个防泄密措施,请谨记!
  • 操作系统(11) (POSIX--Linux线程编程---Mutex互斥锁语法应用)
  • 临床检验方法与仪器 第一部分作业:光谱分析仪器与技术的总结与归纳+新型光谱仪的调研
  • Python学习从0到1 day26 第三阶段 Spark ① 数据输入
  • 在Rocky Linux 9上快速安装Nginx
  • Docker基础(一)
  • 深度学习基础—了解词嵌入