需要导入import static org.mockito.Mockito.*; import static org.junit.Assert.*; import java.util.Iterator; import org.junit.Test;mock可以模拟各种各样的对象,替代真正的对象做出希望的响应。使用mockito的方法:1、使用mock()模拟对象。//模拟LinkList的一个对象
LinkedList mockdedList = mock(LinkedList.class);//此时条用get方法,会返回null,因为还没有对方法调用的返回值做模拟。System.out.printlin(mockedList.get(99));
2、指定mock对象被调用时的返回值。a、模拟,方法调用的返回值。//模拟获取第一个元素时,返回字符串first。给特定的方法调用返回固定值,在官方说法中称stub。(stub,为屏蔽客户调用远程主机上的对象,必须提供某些方式来模拟本地对象,这种本地对象称为存根stub)when(mockedList.get(0).thenReturn("first"));//此时打印输出firstSystem.out.println(mockedList.get(0));
b、模拟,方法调用抛出异常//模拟获取第二个元素时,抛出RuntimeExceptionwhen(mockedList.get(1)).thenThrow(new RuntimeException);//此时抛出RuntimeException异常System.out.println(mockedList.get(1)); 没有返回值类型的方法也可以模拟异常抛出:doThrow(new RuntimeException()).when(mockedList).clear();c、模拟调用方法时的参数匹配//anyInt()匹配任何int参数,这表示参数为任何值,均返回elementwhen(mockedList.get(anyInt())).thenReturn("element");//此时打印是elementSystem.out.println(mockedList.get(99));d、模拟方法调用次数//调用add一次mockedList.add("once");//验证add方法是否被调用了一次,两种写法效果一样verify(mockedList)add("once");verify(mockedList,times(1)).add("once");还可以通过atLeast(int i)和taMost(int i)来验证被调用的次数的最小值和最大值3、验证被测试类是否正确工作,使用verify()。 默认情况下,对于所有的有返回值且没有stub过的地方,mockito会返回相应的默认值,对于内置类型会返回默认值,如int会返回0,布尔值返回false,对于其他type会返回null。mock对象会覆盖整个被mock的对象,因此没有stub的方法只能返回默认值。//重复stub两次,则以第二次为准,如下将返回”second“when(mockedList.get(0)).thenReturn("first");when(mockedList.get(0)).thenReturn("second");//下面这种形式表示第一次调用返回”first“,第二次调用返回”second“,可以写n多个when(mockedList.get(0)).thenReturn("first").thenReturn("second");如果实际调用次数超过了stub过的次数,则会一直返回最后一次stub的值,如上例,第三次调用get(0),则返回 ”second“ 验证方法被调用了特定的次数//验证add方法被调用了两次verify(mockedList,times(2)).add("2");//验证add方法致至少被调用一次verify(mockedList.atLeastOnce()).add("2");//验证add方法至少被调用两次verify(mockedList,atLeast(2)).add("2");//验证add方法最大被调用5次verify(mockedList,atMost(5)).add("2");//验证add方法从未被调用vreify(mockedList,never()).add("2");找到冗余的调用,使用never();
时间: 2024-10-04 10:12:58