1 Mockito 介绍 [3]
1.1 Mockito是什么?
Mockito是mocking框架,它让你用简洁的API做测试。而且Mockito简单易学,它可读性强和验证语法简洁。
1.2 为什么需要Mock
测试驱动的开发( TDD)要求我们先写单元测试,再写实现代码。在写单元测试的过程中,我们往往会遇到要测试的类有很多依赖,这些依赖的类/对象/资源又有别的依赖,从而形成一个大的依赖树,要在单元测试的环境中完整地构建这样的依赖,是一件很困难的事情。如下图所示:
为了测试类A,我们需要Mock B类和C类(用虚拟对象来代替)如下图所示:
1.3 Stub和Mock异同[1]
- 相同:Stub和Mock都是模拟外部依赖
- 不同:Stub是完全模拟一个外部依赖, 而Mock还可以用来判断测试通过还是失败
2 使用Mockito [2][4]
2.1 验证行为
1 @Test 2 public void verify_behaviour(){ 3 //模拟创建一个List对象 4 List mock = mock(List.class); 5 //使用mock的对象 6 mock.add(1); 7 mock.clear(); 8 //验证add(1)和clear()行为是否发生 9 verify(mock).add(1); 10 verify(mock).clear(); 11 }
2.2 模拟我们所期望的结果
@Test public void when_thenReturn(){ //mock一个Iterator类 Iterator iterator = mock(Iterator.class); //预设当iterator调用next()时第一次返回hello,第n次都返回world when(iterator.next()).thenReturn("hello").thenReturn("world"); //使用mock的对象 String result = iterator.next() + " " + iterator.next() + " " + iterator.next(); //验证结果 assertEquals("hello world world",result); }
1 @Test(expected = IOException.class) 2 public void when_thenThrow() throws IOException { 3 OutputStream outputStream = mock(OutputStream.class); 4 OutputStreamWriter writer = new OutputStreamWriter(outputStream); 5 //预设当流关闭时抛出异常 6 doThrow(new IOException()).when(outputStream).close(); 7 outputStream.close(); 8 }
标签:依赖,iterator,Mockito,next,mock,单测,Mock From: https://www.cnblogs.com/wxdlut/p/18382638