引入Mockito让你的测试用例更优美一些 - Java代码测试
【摘要】
Mockito简介 什么是mock? 在软件开发的世界之外, “mock”一词是指模仿或者效仿。 因此可以将“mock”理解为一个替身,替代者. 在软件开发中提及”mock”,通常理解为模拟对象或...
Mockito简介
什么是mock? 在软件开发的世界之外, “mock”一词是指模仿或者效仿。
因此可以将“mock”理解为一个替身,替代者. 在软件开发中提及”mock”,通常理解为模拟对象或者Fake。
为什么需要Mock?
Mock是为了解决units之间由于耦合而难于被测试的问题。所以mock object是unit test的一部分。
使用场景:
你和朋友联合开发,你已经开发好了,朋友已经给了开发文档,但是没有开发好。
此时你已经等不及要开始联调测试自己的代码逻辑了。
遇到这种场景:
最开始,我们会在业务逻辑中把调用的代码给注释掉(因为调不通,朋友还没有开发好),然后把预期的结果直接返回。
就像下面这样。
//朋友未写好的方法(可以是Spring中Bean也可以是Dubbo调用)
@Service
class UserService{
public String getUserName(String uid){
....
return null;
}
}
//我们需要测试的代码(注意我们引入了朋友为写好的方法,如果此时测试直接调用肯定会出错)
@Service
class Me{
@Resource
UserService userService;
public void getUserName(){
String userName = userService.getUserName();
sout("Nihao"+userName)
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
我们要测试Me.class,一般在不使用Mockito之前我们可能就是直接改代码,去测试.像下面这样
@Service
class Me{
@Resource
UserService userService;
public void getUserName(){
//String userName = userService.getUserName();
String userName = "测试";
sout("Nihao"+userName);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
如果我们使用了Mockito是什么样呢?
@RunWith(MockitoJUnitRunner.class)
class Test(){
//会自动将Mock的实例,注入到被标记的依赖的类中
@InjectMock
@Resource
Me me;
//我们引入未写好的方法
@Spy
@Resource
UserService userService;
//在不修改我们代码me的情况下,完成测试。
@Test
public void test(){
Mockito.doReturn("测试").when(userService).getUserName(
Mockito.anyString());
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
注意在使用Mockito之前要先引用MockitoJUnitRunner.class。或者下面这种,通过@Before通过方法的形式引入Mockito
class Test{
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void test(){
Mockito.doReturn("测试").when(userService).getUserName(
Mockito.anyString());
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
MockAPI
api是非常简单的
//创建Mock对象
Mockito.mock(List.class);
Mockito.spy(list);
//默克需要测试的方法
Mockito.when(spy.get(0)).thenReturn(1);
Mockito.doReturn(3).when(mock).get(3);
//mock任意的参数及类型
Mockito.anyString()
Mockito.anyInt()
...
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
POM依赖
<!--mock-->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.8.5</version>
<scope>test</scope>
</dependency>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
总结Mock测试的优点:
- 团队可以并行工作
- 可以创建一个验证或者演示程序。
- 为无法访问的资源编写测试
文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。
原文链接:springlearn.blog.csdn.net/article/details/82152532
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)