Mockito快速入门

为什么单元测试要用Mock?

首先添加maven依赖

然后为了使代码更简洁,最好在测试类中导入静态资源



1.简单的mock操作:
【创建mock对象不能对final,Anonymous(匿名) ,primitive类(原始)进行mock】
【可以用PowerMockito的 @PrepareForTest()注入final类等】
@RunWith(PowerMockRunner.class)语句告诉JUnit用PowerMockRunner来执行测试。
@PrepareForTest(XX.class)语句告诉PowerMock准备XX类进行测试。适用于模拟final类或有final, private, static, native方法的类。

@Test
public void test(){
List<String> list = Mockito.mock(List.class);
Mockito.when(list.get(0)).thenReturn("helloworld");
String result = list.get(0);
Mockito.verify(list).get(0);// 验证list.get(0)是否执行了
Assert.assertEquals("helloworld",result);//(预期值,得到的值)
}


2.异常

@Rule
public ExpectedException thrown= ExpectedException.none();
@Test
public void test(){
Object obj = new Object();//参数设置
thrown.expect(xxooException.class);//预期将抛出的异常
xxService.someMethod(obj);//执行方法,若抛出预期的异常则test成功通过
}


3.怎么mock一个abstract抽象类
可以先创建一个子类继承这个abstract类,override该抽象类的abstract方法,不用override其它方法

@InjectMocks
@Spy
private AbstractService verifyService = new MockService();

private class MockService extends AbstractService{
@Override
public String someMethod() {return null;}
}


4. Mock对象只能调用stubbed方法,调用不了它真实的方法。
但Mockito可以监视(@Spy)一个真实的对象,这时对它进行方法调用时它将调用真实的方法,
同时也可以stubbing这个对象的方法让它返回我们的期望值。另外不论是否是真实的方法调用都可以进行verify验证。
but和创建mock对象一样,对于final类、匿名类和Java的基本类型是无法进行spy的。 
监视对象  
监视一个对象需要调用spy(T object)方法,如:List spy = spy(new LinkedList());那么spy变量就在监视LinkedList实例。 
被监视对象的Stubbing  
stubbing被监视对象的方法时要慎用when(Object),如: 
  1. List spy = spy(new LinkedList());  
  2. when(spy.get(0)).thenReturn("foo");    
  3. doReturn("foo").when(spy).get(0);  
当调用when(spy.get(0)).thenReturn("foo")时,会调用真实对象的get(0),由于list是空的所以会抛出IndexOutOfBoundsException异常,用doReturn可以避免这种情况的发生,因为它不会去调用get(0)方法。 


5.一个真实的对象,无法用 stubbing这个对象的方法让它返回我们的期望值。但是可以通过用@Spy这个对象,就可以stubbing这个对象的方法了。




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值