SpringBoot单元测试利器——Mockito
1. 什么是MockitoMockito是一种Java测试框架,主要用来模拟任何Spring管理的bean,模拟方法的返回,抛出异常等。目前在Java中主流的测试工具有Mockito, JMock, easyMock等,springboot目前内建的是Mockito。官方网站:http://site.mockito.org/2. 什么是Mockmock在翻译过来是模拟的意思,它允许你用模拟对象来替
·
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
更多推荐
已为社区贡献3条内容
所有评论(0)