Mockito.whenmockService.queryInfoMockito.anyQueryCod.class))).thenReturnuInfo);
mockService为接口;
queryInfo是mockService接口里的方法;
QueryCod是方法queryInfo的入参,是一个class对象;且只有一个入参。
uInfo是方法queryInfo的执行结果,uInfo是mock的一个结果。
Mockito.whenmockQueryFacade.queryByRoleIdMockito.anyString),Mockito.anyQueryContext.class))).thenReturnQueryResult);
mockQueryFacade是接口;
queryByRoleId是mockQueryFacade接口里的方法;
queryByRoleId方法有两个入参,
QueryResult queryByRoleIdString roleId, QueryContext context);两个入参均mock。
QueryResult为查询的结果。
需要导入
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 = mockLinkedList.class);
//此时条用get方法,会返回null,因为还没有对方法调用的返回值做模拟。
System.out.printlinmockedList.get99));
2、指定mock对象被调用时的返回值。
a、模拟,方法调用的返回值。
//模拟获取第一个元素时,返回字符串first。给特定的方法调用返回固定值,在官方说法中称stub。
(stub,为屏蔽客户调用远程主机上的对象,必须提供某些方式来模拟本地对象,这种本地对象称为存根stub)
whenmockedList.get0).thenReturn"first"));
//此时打印输出first
System.out.printlnmockedList.get0));
b、模拟,方法调用抛出异常
//模拟获取第二个元素时,抛出RuntimeException
whenmockedList.get1)).thenThrownew RuntimeException);
//此时抛出RuntimeException异常
System.out.printlnmockedList.get1));
没有返回值类型的方法也可以模拟异常抛出:
doThrownew RuntimeException)).whenmockedList).clear);
c、模拟调用方法时的参数匹配
//anyInt)匹配任何int参数,这表示参数为任何值,均返回element
whenmockedList.getanyInt))).thenReturn"element");
//此时打印是element
System.out.printlnmockedList.get99));
d、模拟方法调用次数
//调用add一次
mockedList.add"once");
//验证add方法是否被调用了一次,两种写法效果一样
verifymockedList)add"once");
verifymockedList,times1)).add"once");
还可以通过atLeastint i)和taMostint i)来验证被调用的次数的最小值和最大值
3、验证被测试类是否正确工作,使用verify)。
默认情况下,对于所有的有返回值且没有stub过的地方,mockito会返回相应的默认值,
对于内置类型会返回默认值,如int会返回0,布尔值返回false,对于其他type会返回null。
mock对象会覆盖整个被mock的对象,因此没有stub的方法只能返回默认值。
//重复stub两次,则以第二次为准,如下将返回”second“
whenmockedList.get0)).thenReturn"first");
whenmockedList.get0)).thenReturn"second");
//下面这种形式表示第一次调用返回”first“,第二次调用返回”second“,可以写n多个
whenmockedList.get0)).thenReturn"first").thenReturn"second");
如果实际调用次数超过了stub过的次数,则会一直返回最后一次stub的值,如上例,第三次调用get0),则返回 ”second“
验证方法被调用了特定的次数
//验证add方法被调用了两次
verifymockedList,times2)).add"2");
//验证add方法致至少被调用一次
verifymockedList.atLeastOnce)).add"2");
//验证add方法至少被调用两次
verifymockedList,atLeast2)).add"2");
//验证add方法最大被调用5次
verifymockedList,atMost5)).add"2");
//验证add方法从未被调用
vreifymockedList,never)).add"2");找到冗余的调用,使用never);