美文网首页
Mock工具 Mockito 入门

Mock工具 Mockito 入门

作者: Tinyspot | 来源:发表于2023-02-20 07:05 被阅读0次

1. Mockito简介

  • 官网 https://site.mockito.org/

1.1 添加依赖

<dependency>
  <groupId>org.mockito</groupId>
  <artifactId>mockito-all</artifactId>
  <version>1.9.0</version>
  <scope>test</scope>
</dependency>

一般用 mockito-core 就足够,最简单的方式是 mockito-all

1.2 常用 Mockito 方法

方法名 描述
Mockito.mock(classToMock) 模拟对象
Mockito.mock(classToMock,defaultAnswer)
Mockito.verify(mock) 验证行为是否发生
reset(mock)

1.3 设置返回值

设置对象调用的预期返回值
语法 when(...).thenReturn(value)

对象调用时抛出的异常
语法 when(...).thenThrow(new RuntimeException)

1.4 常用注解

注解 描述
@Mock 注入实例
@InjectMocks

2. 实战

2.1 方式一:通过 Mockito.mock() 来创建 Mock 对象

public class MockDemo {
    @Test
    public void demo() {
        List<String> mockList = Mockito.mock(ArrayList.class);
    }
}

2.2 方式二: 使用注解 @Mock

使用 @Mock 注解时,需要在单元测试类上加上 @ExtendWith(MockitoExtension.class) 或 MockitoAnnotations.initMocks(this)

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
public class MockTest {

    @InjectMocks
    private OrderDao orderDao;

    @Test
    public void test() {
        String query = orderDao.query();
    }
}

使用 MockitoAnnotations.initMocks(this)

public class MockTest {
    @InjectMocks
    private OrderDao orderDao;

    @BeforeEach
    public void setUp() {
        // MockitoAnnotations.initMocks(this);
        MockitoAnnotations.openMocks(this);
    }

    @Test
    public void test() {
        String query = orderDao.query();
    }
}

3. 解决多级依赖树

写单元测试时,若要测试的类有很多依赖,这些依赖的类/对象/资源又会有别的依赖,从而形成一个大的依赖树,要在单元测试的环境中完整地构建这样的依赖,是一件很困难的事情

@ExtendWith(MockitoExtension.class)
public class MockTest {

    @InjectMocks
    private OrderServiceImpl orderService;
    @Mock
    private OrderDao orderDao;

    @Test
    public void test() {
        Mockito.when(orderDao.query()).thenReturn("return_success");
        String query = orderService.query();
        System.out.println(query);
    }
}

相关文章

网友评论

      本文标题:Mock工具 Mockito 入门

      本文链接:https://www.haomeiwen.com/subject/kfdbkdtx.html