Mockito是用于生成模拟对象或者直接点说,就是”假对象“的工具。一般用于联合JUnit进行测试。
使用mockito大致可以划分为以下几个步骤:
① 使用 mockito 生成 Mock 对象;
Class1Mocked obj=mock(Class1Mocked.class);
② 定义(并非录制) Mock 对象的行为和输出(expectations部分);
when(obj.hello("z3")).thenReturn("hello l4"); //hello函数sout"hello "+name
③ 调用 Mock 对象方法进行单元测试;
String actual=obj.hello("z3");
assertEquals("hello l4",actual);
④ 对 Mock 对象的行为进行验证。
verify(obj).hello("z3"); //verify(obj,times(1)).hello("z3"); //可以加参数验证次数
具体再举个简单例子分析:
List mock = mock( List.class );
when( mock.get(0) ).thenReturn( 1 );
assertEquals( "预期返回1", 1, mock.get( 0 ) );// mock.get(0) 返回 1
mock是List模拟的对象,拥有 List 的所有方法和属性。when(xxxx).thenReturn(yyyy); 是指定当执行了这个方法的时候,即定义对象的行为,返回 thenReturn 的值,即定义对象的输出,这个过程相当于是对模拟对象的配置过程,为某些条件给定一个预期的返回值。
注意:
- 对于 static 和 final 方法, Mockito 无法对其 when(…).thenReturn(…) 操作。
- 当我们连续两次为同一个方法使用when(xxxx).thenReturn(yyyy);定义的时候,只会采用最新的一次。但是支持迭代风格的设定。
- 如果没有定义,则只能返回默认值。mock 实例默认的会给所有的方法添加基本实现:返回 null 或空集合,或者 0 等基本类型的值,具体取决于方法返回类型。
对于没有返回值的方法,使用:
when(obj).notify(); 或者doNothing().when(obj).notify();
另外,mockito的注解也很强大,以后有机会再继续学习