1. 什么是Mockito

Mockito是一种Java测试框架,主要用来模拟任何Spring管理的bean,模拟方法的返回,抛出异常等。目前在Java中主流的测试工具有Mockito, JMock, easyMock等,springboot目前内建的是Mockito。官方网站:Mockito framework site

2. 什么是Mock

mock在翻译过来是模拟的意思, 它允许你用模拟对象来替换你的系统的部分,并对它们已使用的方式进行断言。实际的项目开发中,再做单元测试的时候通常会遇到一下问题:

  • 接口的依赖

  • 外部接口调用

  • 测试环境非常复杂

使用mock 就可以对外部依赖组件实现进行模拟并且替换掉,从而使得单元测试将焦点只放在当前的单元功能。

3. 在springboot中使用Mockito

在项目pom.xml中引入依赖spring-boot-starter-test,内部就依赖了Junit,Mockito。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>

写好一个Bean UserService, 调用UserDAO。

@Service
public class UserService{
    @Autowired
    private UserDAO userDAO;

    public User findByUserId(String userId){
        return userDAO.getByUserId(userId);
    }
}

在底层UserDAO 没有具备的情况下,对userService的方法做单元测试。

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTest{
    @Autowired
    private UserService userService;

    @MockBean
    private UserDAO userDAO;
    @Test
    public void test1(){
        Mockito.when(userDAO.getByUserId("55")).thenReturn(new User("55","testUser"));
        User user = userService.findByUserId("55");
        Assert.assertNotNull(user);
        Assert.assertEquals("testUser", user.getName());
    }
}
  • thenReturn: 当满足条件时返回指定的内容
  • thenThrow:当满足条件时抛出异常
  • verify: 验证调用顺序

4. Mockito的限制

Mockito在mock对象时,有一些限制条件:

  • 不能mock静态方法
  • 不能mock private方法
  • 不能mock final class
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐