概述
文章目录
- 一.概述
- 1.什么是mock测试?
- 2.为什么要有mock测试?
- 3.mock的案例
- 二.介绍mock
- 1.@Mock与@InjectMocks的区别
- 2.any() 和anyString()方法
一.概述
1.什么是mock测试?
Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取的比较复杂的对象(如 JDBC 中的ResultSet 对象),用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法。
2.为什么要有mock测试?
Mock是为了解决不同的单元之间由于耦合而难于开发、测试的问题。所以,Mock既能出现在单元测试中,也会出现在集成测试、系统测试过程中。
没用mock时 | 使用了mock |
---|---|
- 解释: 比如我们需要调用第三方http接口或者(数据库,硬件资源)时, 所调用的依赖异常导致流程中断我们可以使用mock约定好结果进行返回;
- 建议: mock接口只能主流程联调/ 异常返回测试,不要过分依赖mock接口进行测试。
3.mock的案例
package Mockito;
import org.junit.Assert;
import org.junit.Test;
import java.util.List;
import static org.mockito.Mockito.*;
public class MyTest {
@Test
public void myTest() {
/* 创建 Mock 对象 */
List list = mock(List.class);
/* 设置预期,当调用 get(0) 方法时返回 "111" */
when(list.get(0)).thenReturn("111");
Assert.assertEquals("asd", 1, 1);
/* 设置后返回期望的结果 */
System.out.println(list.get(0));
/* 没有设置则返回 null */
System.out.println(list.get(1));
/* 对 Mock 对象设置无效 */
list.add("12");
list.add("123");
/* 返回之前设置的结果 */
System.out.println(list.get(0));
/* 返回 null */
System.out.println(list.get(1));
/* size 大小为 0 */
System.out.println(list.size());
/* 验证操作,验证 get(0) 调用了 2 次 */
verify(list, times(2)).get(0);
/* 验证返回结果 */
String ret = (String)list.get(0);
Assert.assertEquals(ret, "111");
}
}
二.介绍mock
1.@Mock与@InjectMocks的区别
- @Mock: 创建一个Mock.
- @InjectMocks: 创建一个实例,简单的说是这个Mock可以调用真实代码的方法,其余用@Mock(或@Spy)注解创建的mock将被注入到用该实例中。
- 注意:必须使用@RunWith(MockitoJUnitRunner.class) 或 Mockito.initMocks(this)进行mocks的初始化和注入。
2.any() 和anyString()方法
- any() 无论传入任何参数值,都返回xxx
any(Query.class)
- anyString() 表示任何一个字符串都可以
anyString() 表示任何一个字符串都可以。null?也可以的!类似 anyString ,还有 anyInt, anyLong, anyDouble 等等。 anyObject 表示任何对象, any(clazz) 表示任何属于clazz的对象。
最后
以上就是乐观小丸子为你收集整理的mock测试一.概述3.mock的案例二.介绍mock的全部内容,希望文章能够帮你解决mock测试一.概述3.mock的案例二.介绍mock所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复