网站首页 > 技术文章 正文
1、需求背景
在开发需求中,发现测试passport新增接口,目前现状下,还是比较麻烦,就了解了一下mockito。整体使用还是比较容易的,下文整理一下玩法,以作后续参考!
下面实例:模拟UserDao的实现impl,当然,举一反三,完全也就可以mock 的dubbo远程实现类了~
2、使用步骤
1、引入依赖:因为spring-boot-starter-test中已经依赖Mockito包了,所以,一般我们无需额外再引其他包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2、src/test/java 下编写单元测试
public class User {
private Integer id;
private String name;
//getter/setter
}
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(...);
猜你喜欢
- 2024-10-17 使用 Spock 编写高效简洁的单元测试
- 2024-10-17 程序员有福了!万字长文带你掌握SpringBoot所提供的测试解决方案
- 2024-10-17 如何使用Spring Boot提供的测试工具和注解。
- 2024-10-17 单元测试实践(Spring-boot+Junbit5+Mockito)
- 2024-10-17 Spring云原生实战指南:8 弹性和可扩展性
- 2024-10-17 SpringBoot 太强了,这些优势你需要了解
- 2024-10-17 如何使用Spring Cloud Contract(如何使用朋友的山姆卡)
- 2024-10-17 Spring Boot 开发离不开这些注解,快来学习啦!
- 2024-10-17 Spring Boot中文参考指南46.3.11、自动配置的Spring WebFlux测试
- 2024-10-17 一台不容错过的Java单元测试代码“永动机”
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)