首页 > 试题

atleast

更新时间:2022-11-12 14:46:34 阅读: 评论:0

flash源文件成品-在农场英语


2022年11月12日发(作者:寻找身边的感动)

Mockito简单语法使⽤

使⽤类库需要在中加⼊mockito依赖配置:

testCompile'o:mockito-core:2.8.9'

Mock的概念:

所谓的mock就是创建⼀个类的虚假的对象,在测试环境中,⽤来替换掉真实的对象,以达到两⼤⽬的:

1.验证这个对象的某些⽅法的调⽤情况,调⽤了多少次,参数是什么等等

2.指定这个对象的某些⽅法的⾏为,返回特定的值,或者是执⾏特定的动作

上⾯说了Mock的概念,下⾯开始搬砖,写段代码⽰例来说明Mockito的⼀些常⽤语法使⽤,代码如下:

/************************************************************

*Author:ssc

*Date:2018/7/20

*Version:1.0

*Description:⼈的逻辑判断层

*History:

*

***********************************************************/

publicclassPerson{

/**

*获取该类型性别并进⾏打印

*

*@paramtype0代表⼥⽣、1代表男⽣、其他数字提⽰参数有误

*/

publicvoidgetSex(inttype){

if(type==0){

printing("⼥");

}elif(type==1){

printing("男");

}el{

printing("参数有误");

}

}

/**

*打印⽅法

*

*@paramcontent

*/

publicvoidprinting(Stringcontent){

//这⾥为了简单我们直接控制台输出

(content);

}

/**

*判断类型是否是男⼈

*

*@paramtype

*@return

*/

publicbooleanisMan(inttype){

//处理逻辑这⾥为了⽅便我们直接进⾏简单判断

returntype==1;

}

}

1.如何mock出⼀个虚假的对象:

Personperson=();

2.如何验证⽅法调没调⽤

(person).getSex(...);这句话的作⽤是,验证person的getSex得到了调⽤,调⽤次数为1次。因为这⾏代码其实是:

(person,(1)).getSex(...)的简写,或者说重载⽅法,注意其中的(1)。因此,如果你想验证⼀个对

象的某个⽅法得到了多次调⽤,只需要将次数传给()就好了。

(person,(3)).getSex(...);//验证person的⽅法getSex(...)得到了三次调⽤。

2.1验证⽅法的调⽤次数⽅法有:

times(n):⽅法被调⽤n次

never():没有被调⽤

atLeast(n):⾄少被调⽤n次

atLeastOnce():⾄少被调⽤1次,相当于atLeast(1)

atMost():最多被调⽤n次

代码演⽰:

//执⾏1次

verify(person,times(1)).add(...);

//执⾏2次

verify(person,times(2)).add(...);

verify(person,times(3)).add(...);

//从不执⾏,never()等同于times(0)

verify(person,never()).add(...);

//验证⾄少执⾏1次

verify(person,atLeastOnce()).add(...);

//验证⾄少执⾏2次

verify(person,atLeast(2)).add(...);

//验证最多执⾏4次

verify(person,atMost(4)).add(...);

3.在不关⼼参数为什么值的情况下,如何通过Mock的语法给出⽅法所需要的参数对应类型

⽐如上⾯的例⼦,我们在调⽤性别后,会⾛打印⽅法,这是我们只关⼼打印⽅法⾛没⾛,⽽不关⼼他的参数是什么的时候,我们就要⽤到Mock的

any⽅法。代码如下:

(person).printing(ing());

anyString()表⽰任何⼀个字符串都可以。下⾯我列举⼀些常⽤的参数适配⽅法

3.1参数适配⽅法

anyString

anyInt

anyLong

anyDouble

anyObject表⽰任何对象

any(clazz)表⽰任何属于clazz的对象

anyCollection

anyCollectionOf(clazz)

anyList(Map,t)

anyListOf(clazz)等等

4.指定某个⽅法的返回值,或者是执⾏特定的动作。

4.1指定某个⽅法的返回值

(Method(args)).thenReturn(desiredReturnValue);

该⽅法是执⾏Method()使其返回特定的值desiredReturnValue,据需⽤我们的person来举例:

//当调⽤person的isMan⽅法,同时传⼊"0"时,返回true

(注意这个时候我们调⽤(0);的时候值为true⽽调⽤其他数字则为fal,

如果我们忽略数字,传任何值都返回true时,就可以⽤到我们上⾯讲的any()参数适配⽅法)

((0)).thenReturn(true);

//当调⽤person的isMan⽅法,同时传⼊"0"时,返回fal(注意同上⾯解释⼀样)

((0)).thenReturn(fal);

相关语法

doThrow(Throwable...):进⾏异常测试

@Test

publicvoidtestMock(){

Listlist=mock();

("123");

//当list调⽤clear()⽅法时会抛出异常

doThrow(newRuntimeException()).when(list).clear();

();

}

doReturn():指定返回值

@Test

publicvoidtestMock(){

Listlist=mock();

doReturn("123").when(list).get(anyInt());

n((0));

}

doNothing():指定void⽅法什么都不做

doCallRealMethod():指定⽅法调⽤内部的真实逻辑

classFoo{

publicvoiddoFoo(){

n("methoddoFoocalled.");

}

publicintgetCount(){

return1;

}

}

@Test

publicvoidtestMock(){

Foofoo=mock();

//什么信息也不会打印,mock对象并不会调⽤真实逻辑

();

//啥也不会打印出来

doNothing().when(foo).doFoo();

();

doCallRealMethod().when(foo).doFoo();

//这⾥会调⽤真实逻辑,打印出"methoddoFoocalled."信息

();

//这⾥会打印出0

n(nt());

doCallRealMethod().when(foo).getCount();

//这⾥会打印出"1"

n(nt());

}

4.2执⾏特定的动作

在安装中经常⽤到⽹络请求数据,⽽我们在测试时忽略⽹络请求这块时,就可以⽤到mock的执⾏特定的动作:

er(desiredAnswer).when(mockObject).targetMethod(args);

传给doAnswer()的是⼀个Answer对象,我们想要执⾏什么样的动作,就在这⾥⾯实现。如:

//登录操作:

/**

*⽹络请求返回

*/

publicinterfaceNetCallback{

voidonSuccess(Objectdata);

voidonFailure(intcode,Stringmsg);

}

/**

*⽹络请求

*Createdbyxiaochuangon4/25/16.

*/

publicclassApi{

publicvoidget(Stringurl,Mapparams,NetworkCallbackcallback){

//⽹络请求处理操作逻辑,这块忽略写法

//成功调⽤ess(data);

//失败调⽤ure(code,msg);

}

}

----------------------------------------------------------------------分割线上⾯是⽹络请求,下⾯是doAnswer的使⽤⽅法

Apiapi=mock();

er(newAnswer(){

@Override

publicObjectanswer(InvocationOnMockinvocation)throwsThrowable{

//这⾥可以获得传给performLogin的参数

Object[]arguments=uments();

//callback是第三个参数下标是2

NetworkCallbackcallback=(NetworkCallback)arguments[2];

ure(500,"Servererror");

return500;

}

}).when(api).get(anyString(),any(),any());

//这时我们调⽤()⽅法

("",null,newNetworkCallback(){

@Override

publicvoidonSuccess(Objectdata){

}

@Override

publicvoidonFailure(intcode,Stringmsg){

(msg);

}

});

//控制台输出Servererror。这样我们在测试时,可以忽略⽹络请求,然后直接判断请求后的操作

有了mock可以使我们的单元测试更加⽅便便捷。

本文发布于:2022-11-12 14:46:34,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/88/4932.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:小惠未徧
下一篇:labelled
标签:atleast
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图