什么是Mockito
Mockito 是一个强大的用于 Java 开发的模拟测试框架, 通过 Mockito 我们可以创建和配置 Mock 对象, 进而简化有外部依赖的类的测试。
Mockito基本使用(基于Spring Boot)
Maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
创建测试类
import static org.mockito.Mockito.*;
public class TransferServiceImplTest {
@Spy
private AccountRepository accountRepository;
@Spy
private AccountTransferServiceImpl accountTransferService;
@InjectMocks
private TransferServiceImpl transferService;
private static Account account1 = new Account(123L, new Money(BigDecimal.valueOf(1000L), new Currency("CNY")), "123");
private static Account account2 = new Account(124L, new Money(BigDecimal.valueOf(4000L), new Currency("CNY")), "124");
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
when(accountRepository.find(account1.getUserId())).thenReturn(account1);
when(accountRepository.find(account2.getAccoutNumber())).thenReturn(account2);
}
@Test
public void transfer() throws Exception {
transferService.transfer(123L, "124", BigDecimal.valueOf(100), "CNY");
verify(accountRepository).find(123L);
verify(accountRepository).find("124");
verify(accountRepository, times(2)).save(any());
assertEquals(BigDecimal.valueOf(900L), account1.getAmout().getAmout());
assertEquals(BigDecimal.valueOf(4100L), account2.getAmout().getAmout());
}
}
基本用法
配置Mock对象
方式1:使用 mock 静态方法创建 Mock 对象
方式2:使用注解@Mock
,然后在初始化MockitoAnnotations.initMocks(this);
注解说明
- @Mock:初始化Mock对象
- @Spy:包装一个真实的 Java 对象
- @@InjectMocks:自动注入mocks 对象到我们注解的变量中
校验 Mock 对象的方法调用
- 使用verify可以观察方法调用的次数,如果与事实不符,则会抛异常,阻断后面代码的运行。