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

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注