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 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),如:

List spy = spy(newLinkedList());

when(spy.get(0)).thenReturn("foo");

doReturn("foo").when(spy).get(0);

当调用when(spy.get(0)).thenReturn("foo")时,会调用真实对象的get(0),由于list是空的所以会抛出IndexOutOfBoundsException异常,用doReturn可以避免这种情况的发生,因为它不会去调用get(0)方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,047评论 19 139
  • 本文介绍了Android单元测试入门所需了解的内容,包括JUnit、Mockito和PowerMock的使用,怎样...
    于卫国阅读 4,730评论 0 5
  • 对象的创建与销毁 Item 1: 使用static工厂方法,而不是构造函数创建对象:仅仅是创建对象的方法,并非Fa...
    孙小磊阅读 2,200评论 0 3
  • 原文链接 : Unit tests with Mockito - Tutorial 原文作者 : vogella ...
    曾梓华阅读 34,873评论 2 50
  • 秋,是最舒适的季节。不同于春的温暖慵懒,夏的燥热困顿,冬的冰冷刺骨,提到秋,人们脑海中就自动浮现出一个词:神清气爽...
    哒小吗阅读 437评论 0 0

友情链接更多精彩内容