Mockito入门使用一例
2014-06-13 16:08
337 查看
Mock的使用有很多方式,我们常用的有以下几种,看示例代码
另外还一个注解
@InjectMocks 这个注解不会把一个类变成mock或是spy,但是会把当前对象下面的Mock/Spy类注入进去,按类型注入
关于注入有一些要注意
1. 当一个类依赖的是一个父类,你mock一个子类去注入也是可以的
2. 注入是按类型而不是变量名
3. 如果主类有两个属性是类一种类型,比如A里面有两个属性
private B b1;
private B b2;
我们有一个mock
@Mock
B b;
这时个两个属性都被注入同样的值
如果有两个Mock
@Mock
B b1;
@Mock
B b2;
结果两个属性都没有被注入
public class TestMock { @Mock A a;//生成一个A的Mock @Spy A a1 = new A();//生成一个A的Spy, Spy或是InjectMocks必需自己初始化对象,Mock可以不用初始化 @Before public void init(){ MockitoAnnotations.initMocks(this);//初使化Mock } @Test public void testGo(){ Mockito.when(a.go()).thenReturn(false);//做mock,当调用go方法时,直接返回false Assert.assertFalse(a.go());//结果 false, 控制台没有输出gogogo //做mock,当调用go方法时,直接返回false,但是a1是spy, //spy的意思是如果有mock就调用mock方法,如果没有mock就调用真实的方法, //这个时候go还没有被mock,所以会输出gogogo Mockito.when(a1.go()).thenReturn(false); Assert.assertFalse(a.go());//结果是false //这样子mock,就不会输出gogogo Mockito.doReturn(false).when(a).go(); Assert.assertFalse(a.go());//结果是false //注:如果go是一个final的方法, 你会发现无论如何都mock不了,一定会调用真实的方法,这说明mock出来的代理类无法重写这个方法 } } class A { public boolean go(){ System.out.println("gogogo"); return true; } }
另外还一个注解
@InjectMocks 这个注解不会把一个类变成mock或是spy,但是会把当前对象下面的Mock/Spy类注入进去,按类型注入
关于注入有一些要注意
1. 当一个类依赖的是一个父类,你mock一个子类去注入也是可以的
2. 注入是按类型而不是变量名
3. 如果主类有两个属性是类一种类型,比如A里面有两个属性
private B b1;
private B b2;
我们有一个mock
@Mock
B b;
这时个两个属性都被注入同样的值
如果有两个Mock
@Mock
B b1;
@Mock
B b2;
结果两个属性都没有被注入
相关文章推荐
- Mock 模拟测试简介及 Mockito 使用入门
- Mockito入门学习(2)--Mock的基本使用
- Mockito使用
- 测试框架Mockito使用笔记
- Mockito入门学习(1)–概念介绍
- PowerMockito使用详解
- Mockito入门
- 基于TestNG使用PowerMock的Mockito扩展在Maven测试项目中的配置说明
- 使用junit+mockito进行mock测试实例
- Mockito入门、实例及完整介绍
- Mockito使用
- 单元测试及框架简介 --junit、jmock、mockito、powermock的简单使用
- 使用Retrofit和Mockito进行可靠的Android API测试
- 单元测试及框架简介 --junit、jmock、mockito、powermock的简单使用
- PowerMockito使用详解(转)
- PowerMockito的基本使用记录
- 当Mockito遭遇使用注解注入的变量
- Mockito中ArgumentCaptor的使用方法
- Mockito 使用
- Mockito入门学习(3)–Partial Mock(部分模拟)