Mockito简单入门

Posted by Kaka Blog on December 28, 2020

什么是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可以观察方法调用的次数,如果与事实不符,则会抛异常,阻断后面代码的运行。

参考