简述
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