自学内容网 自学内容网

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应用程序中,这对于测试业务逻辑而不依赖于外部资源(如数据库)至关重要。

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

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


原文地址:https://blog.csdn.net/chengxuyuznguoke/article/details/143647550

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!