开发者社区> 问答> 正文

模拟依赖方法有哪些?

已解决

模拟依赖方法有哪些?

展开
收起
游客lmkkns5ck6auu 2022-10-26 18:10:21 301 0
1 条回答
写回答
取消 提交回答
  • 推荐回答

    在模拟完依赖的参数和返回值后,就可以利用 Mockito 和 PowerMock 的功能,进 行依赖方法的模拟。如果依赖对象还有方法调用,还需要模拟这些依赖对象的方法。

    1. 根据返回模拟方法 1) 模拟无返回值方法 2) 模拟方法单个返回值 3) 模拟方法多个返回值 直接列举出多个返回值: 转化列表为多个返回值: 4) 模拟方法定制返回值 可利用 Answer 定制方法返回值: 5) 模拟方法抛出单个异常 指定单个异常类型: 指定单个异常对象: 6) 模拟方法抛出多个异常 指定多个异常类型: 指定多个异常对象: 7) 直接调用真实方法

    2. 根据参数模拟方法 Mockito 提供 do-when 语句和 when-then 语句模拟方法。 1) 模拟无参数方法 对于无参数的方法模拟: 2) 模拟指定参数方法 对于指定参数的方法模拟: 3) 模拟任意参数方法 在编写单元测试用例时,有时候并不关心传入参数的具体值,可以使用 Mockito 参 数匹配器的 any 方法。Mockito 提供了 anyInt、anyLong、anyString、anyList、 anySet、anyMap、any(Class clazz)等方法来表示任意值。 4) 模拟可空参数方法 Mockito 参数匹配器的 any 具体方法,并不能够匹配 null 对象。而 Mockito 提供一 个 nullable 方法,可以匹配包含 null 对象的任意对象。此外,Mockito.any()方法也 可以用来匹配可空参数。 5) 模拟必空参数方法 同样,如果要匹配 null 对象,可以使用 isNull 方法,或使用 eq(null)。 6) 模拟不同参数方法 Mockito 支持按不同的参数分别模拟同一方法。 注意: 如果一个参数满足多个模拟方法条件,会以最后一个模拟方法为准。 7) 模拟可变参数方法 对于一些变长度参数方法,可以按实际参数个数进行模拟: 也可以用 Mockito.any()模拟一个通用匹配方法: 注意: Mockito. any()并不等于 Mockito.any(Class type),前者可以匹配 null 和类型 T 的可变参数,后者只能匹配 T 必填参数。

    3. 模拟其它特殊方法 1) 模拟 final 方法 PowerMock 提供对 final 方法的模拟,方法跟模拟普通方法一样。但是,需要把对 应的模拟类添加到@PrepareForTest 注解中。 2) 模拟私有方法 PowerMock 提供提对私有方法的模拟,但是需要把私有方法所在的类放在 @PrepareForTest 注解中。 3) 模拟构造方法 PowerMock 提供 PowerMockito.whenNew 方法来模拟构造方法,但是需要把使用 构造方法的类放在@PrepareForTest 注解中。 4) 模拟静态方法 PowerMock 提供 PowerMockito.mockStatic 和 PowerMockito.spy 来模拟静态方法 类 , 然 后 就可以 模 拟静态 方法了。 同 样,需要把 对 应 的 模 拟 类添加 到 @PrepareForTest 注解中。 注意: 第一种方式不适用于 PowerMockito.spy 模拟的静态方法类。

    以上内容摘自《Java工程师必读手册》电子书,点击https://developer.aliyun.com/ebook/download/7780 可下载完整版

    2022-10-26 20:22:00
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
阿里云开发者社区官方技术圈,用户产品功能发布、用户反馈收集等。
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
一起来试验保险箱的脆弱面 立即下载
一起来试验 保险箱的脆弱面 立即下载