首页 > 其他分享 >使用Mockito进行springboot测试

使用Mockito进行springboot测试

时间:2022-12-24 01:00:35浏览次数:44  
标签:userRepository springboot Mockito 替身 测试 返回值 id

简述

  Mockito为测试创建test double,即测试替身。

  我们进行测试的时候,很多情况下我们测试的区域会依赖很多外部库,这时就需要测试替身,模拟外部库的返回值,让我们专注于我们要测试的内容。

常用注解和用法

@ExtendWith(MockitoExtension.class)

  使用 @ExtendWith(MockitoExtension.class)开启对Mockito的支持

@Mock

  @Mock注解标注在我们想要创建测试替身的成员变量上,本质上会创建一个子类,所有方法返回值为null

@InjectMocks

  @InjectMocks注解会帮我们把该成员构造好,使用的是@Mock注解生成的测试替身类

Mockito.when()

  Mockito.when()方法会指定测试替身具体方法的返回值,达到模拟外部依赖返回值的作用

Mockito.verify()

  Mockito.verify()检查参数里的类的方法是否被调用

实例

  例如这里我们想测试的是UserService,我们想创建的测试替身是UserRepository

  我们使用Mockito.when()方法,指定userRepository.findOneById(id)的返回值是Optional.ofNullable(buildUser())

  使用Mockito.verify(),检查userRepository的findOneById(id)是否被调用

@ExtendWith(MockitoExtension.class)
class UserServiceTest {

    //本质上就是帮我们new了一个UserRepository子类注入进来,里面的所有方法返回值都是null
    @Mock
    private UserRepository userRepository;

    //会自动检索@Mock标注的类,作为参数传入构造方法
    @InjectMocks
    private UserService userService;

    @Test
    void testing_with_mockito_injection() {
        final var id = 123L;
        when(userRepository.findOneById(id)).thenReturn(Optional.ofNullable(buildUser()));
        User user = userService.findById(id);
        assertThat(user.getId()).isEqualTo(id);
        Mockito.verify(userRepository).findOneById(id);
    }

    User buildUser() {
        return User.builder()
                .id(123L)
                .name("Panda")
                .age(24L)
                .avatar("http://...")
                .description("A good guy.")
                .build();
    }
}

 

标签:userRepository,springboot,Mockito,替身,测试,返回值,id
From: https://www.cnblogs.com/CNLayton/p/17001889.html

相关文章