1、需求背景
在开发需求中,发现测试passport新增接口,目前现状下,还是比较麻烦,就了解了一下mockito。整体使用还是比较容易的,下文整理一下玩法,以作后续参考!
下面实例:模拟UserDao的实现impl,当然,举一反三,完全也就可以mock 的dubbo远程实现类了~
2、使用步骤
1、引入依赖:因为spring-boot-starter-test中已经依赖Mockito包了,所以,一般我们无需额外再引其他包
org.springframework.boot
spring-boot-starter-test
test
2、src/test/java 下编写单元测试
public class User {
private Integer id;
private String name;
//getter/setter
}
//UserDao :无实现类,只有接口
public interface UserDao { //无实现类,只有接口
User getUserById(Integer id);
Integer insertUser(User user);
public void print(String name);
}
@Component
public class UserService {
@Autowired
private UserDao userDao;
public User getUserById(Integer id) {
return userDao.getUserById(id);
}
public Integer insertUser(User user) {
return userDao.insertUser(user);
}
}
测试:
/**
* Mockito 的限制:
* ======================================
* 不能 mock 静态方法
* 不能 mock private 方法
* 不能 mock final class
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTest {
@Autowired
private UserService userService;
@MockBean //模拟, 即使真实不存在!
private UserDao userDao;
@Test
public void getUserById() throws Exception {
//mock 根据指定参数时,返回值
//定义当调用mock userDao的getUserById()方法,并且参数为3时,就返回id为200、name为I'm mock3的user对象
Mockito.when(userDao.getUserById(3)).thenReturn(new User(200, "I'm mock 3"));
//任何整数 作为参赛
Mockito.when(userDao.getUserById(Mockito.anyInt())).thenReturn(new User(200, "I'm mock 3"));
//模拟不管传进来的 user 是什麽,都回传 100
Mockito.when(userService.insertUser(Mockito.any(User.class))).thenReturn(100);
//mock抛异常
Mockito.when(userService.getUserById(9)).thenThrow(new RuntimeException("mock throw exception"));
//上面是有返回值的mock;这种是方法签名返回void
Mockito.doThrow(new RuntimeException("mock throw exception2")).when(userDao).print(Mockito.anyString());
User user1 = userService.getUserById(3); //User{id=200, name='I'm mock 3'}
User user2 = userService.getUserById(1); //null
User user3 = userService.getUserById(9); //会抛出一个RuntimeException
Integer i = userService.insertUser(new User()); //会返回100
System.out.println("===============>" + user1);
System.out.println("===============>" + i);
userDao.print("xxxx"); //会抛出一个RuntimeException2
}
}
3、总结
上例,总结起来,主要下面2步:
1、对于要mock的实例,添加 @MockBean 注解
@MockBean //需要被模拟的bean
private UserDao userDao;
2、mock使用一般方式
Mockito.when(...).thenReturn(...);
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。