mock获取入参数并动态设置返回值
/* | |
* Copyright (c) 2007 Mockito contributors | |
* This program is made available under the terms of the MIT License. | |
*/ | |
package org.mockitousage.stubbing; | |
import org.junit.Test; | |
import org.mockito.Mock; | |
import org.mockito.invocation.InvocationOnMock; | |
import org.mockito.stubbing.Answer; | |
import org.mockitousage.IMethods; | |
import org.mockitoutil.TestBase; | |
import java.lang.reflect.Method; | |
import java.util.Set; | |
import static org.junit.Assert.*; | |
import static org.mockito.Mockito.*; | |
public class StubbingWithCustomAnswerTest extends TestBase { | |
@Mock | |
private IMethods mock; | |
@Test | |
public void shouldAnswer() throws Exception { | |
when(mock.simpleMethod(anyString())).thenAnswer(new Answer<String>() { | |
public String answer(InvocationOnMock invocation) throws Throwable { | |
String arg = invocation.getArgument(0); | |
return invocation.getMethod().getName() + "-" + arg; | |
} | |
}); | |
assertEquals("simpleMethod-test", mock.simpleMethod("test")); | |
} | |
@Test | |
public void shouldAnswerWithThenAnswerAlias() throws Exception { | |
RecordCall recordCall = new RecordCall(); | |
Set<?> mockedSet = (Set<?>) when(mock(Set.class).isEmpty()).then(recordCall).getMock(); | |
mockedSet.isEmpty(); | |
assertTrue(recordCall.isCalled()); | |
} | |
@Test | |
public void shouldAnswerConsecutively() throws Exception { | |
when(mock.simpleMethod()) | |
.thenAnswer(new Answer<String>() { | |
public String answer(InvocationOnMock invocation) throws Throwable { | |
return invocation.getMethod().getName(); | |
} | |
}) | |
.thenReturn("Hello") | |
.thenAnswer(new Answer<String>() { | |
public String answer(InvocationOnMock invocation) throws Throwable { | |
return invocation.getMethod().getName() + "-1"; | |
} | |
}); | |
assertEquals("simpleMethod", mock.simpleMethod()); | |
assertEquals("Hello", mock.simpleMethod()); | |
assertEquals("simpleMethod-1", mock.simpleMethod()); | |
assertEquals("simpleMethod-1", mock.simpleMethod()); | |
} | |
@Test | |
public void shouldAnswerVoidMethod() throws Exception { | |
RecordCall recordCall = new RecordCall(); | |
doAnswer(recordCall).when(mock).voidMethod(); | |
mock.voidMethod(); | |
assertTrue(recordCall.isCalled()); | |
} | |
@Test | |
public void shouldAnswerVoidMethodConsecutively() throws Exception { | |
RecordCall call1 = new RecordCall(); | |
RecordCall call2 = new RecordCall(); | |
doAnswer(call1) | |
.doThrow(new UnsupportedOperationException()) | |
.doAnswer(call2) | |
.when(mock).voidMethod(); | |
mock.voidMethod(); | |
assertTrue(call1.isCalled()); | |
assertFalse(call2.isCalled()); | |
try { | |
mock.voidMethod(); | |
fail(); | |
} catch (UnsupportedOperationException e) { | |
} | |
mock.voidMethod(); | |
assertTrue(call2.isCalled()); | |
} | |
@Test | |
public void shouldMakeSureTheInterfaceDoesNotChange() throws Exception { | |
when(mock.simpleMethod(anyString())).thenAnswer(new Answer<String>() { | |
public String answer(InvocationOnMock invocation) throws Throwable { | |
assertTrue(invocation.getArguments().getClass().isArray()); | |
assertEquals(Method.class, invocation.getMethod().getClass()); | |
return "assertions passed"; | |
} | |
}); | |
assertEquals("assertions passed", mock.simpleMethod("test")); | |
} | |
private static class RecordCall implements Answer<Object> { | |
private boolean called = false; | |
public boolean isCalled() { | |
return called; | |
} | |
public Object answer(InvocationOnMock invocation) throws Throwable { | |
called = true; | |
return null; | |
} | |
} | |
} |
2. 当mock一个对象,且执行此对象中的方法没有返回值时,使用下面的方法:
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
类名 对象 = Mockito.mock(类名.class);
Mockito.doAnswer(new Answer<Object>() {
public Object answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
return "called with arguments: " + args;
}
}).when(对象).方法名();
---------------------
本文来自 flysun3344 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/flysun3344/article/details/52065492?utm_source=copy
mock获取入参数并动态设置返回值的更多相关文章
- 常量函数、常量引用参数、常量引用返回值[C++]
1. 关于常量引用正像在C语言中使用指针一样,C++中通常使用引用 有一个函数... foo()并且这个函数返回一个引用...... & foo()...., 一个指向位图(Bitmap)的引 ...
- 使用 ResponseBodyAdvice 拦截Controller方法默认返回参数,统一处理返回值/响应体
使用 @ControllerAdvice & ResponseBodyAdvice 拦截Controller方法默认返回参数,统一处理返回值/响应体 1.Controller代码 以下是Con ...
- day03 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测 ...
- Java程序调用带参数的shell脚本返回值
Java程序调用带参数的shell脚本返回值 首先来看看linux中shell变量(\(#,\)@,$0,$1,\(2)的含义解释 变量说明: - \)$ Shell本身的PID(ProcessI ...
- JQuery/JS select标签动态设置选中值、设置禁止选择 button按钮禁止点击 select获取选中值
//**1.设置选中值:(根据索引确定选中值)**// var osel=document.getElementById("selID"); //得到select的ID var o ...
- c++11之获取模板函数的参数个数和函数返回值类型
本文演示c++需要支持c++11及以上标准 获取参数个数 1.模板函数声明 template <class R, class... Args> R getRetValue(R(*)(Arg ...
- c语言main函数返回值、参数详解(返回值是必须的,0表示正常退出)
C语言Main函数返回值 main函数的返回值,用于说明程序的退出状态.如果返回0,则代表程序正常退出:返回其它数字的含义则由系统决定.通常,返回非零代表程序异常退出. 很多人甚至市面上的一些书籍,都 ...
- c++特性:指向类成员的指针和非类型类模板参数和函数指针返回值 参数推导机制和关联型别
一.c++允许定义指向类成员的指针,包括类函数成员指针和类数据成员指针 格式如下: class A { public: void func(){printf("This is a funct ...
- [android] setOnTouchEvent 设置返回值为true 和 false的区别
今天在做自定义的可选文本的 TextView 类时,用到了 View 类的 setOnTouchListener(OnTouchListener l)事件监听,在构造 OnTouchListener ...
随机推荐
- Laravel框架中的event事件操作
有时候当我们单纯的看 Laravel 手册的时候会有一些疑惑,比如说系统服务下的授权和事件,这些功能服务的应用场景是什么,其实如果没有经历过一定的开发经验有这些疑惑是很正常的事情,但是当我们在工作中多 ...
- CSS----布局注意事项
1.当div标签中含有子标签,如果div标签的大小是被div中的子标签撑起来的,那么可能布局(之后)可能就会出现问题(if 父级div中没有border,padding,inlinecontent,子 ...
- python 全栈开发,Day129(玩具开机提示语,为多个玩具发送点播,聊天界面,app录音,app与服务器端文件传输,简单的对话)
一.玩具开机提示语 先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.2.zi ...
- ERP打印入库单(四十)
需求描述:此购进单的基本信息,购进单位,入库单位,入库时间……此购进单批号,产品名称,生产企业,等基本信息.实现能够循环加载打印.本单金额小计,整单金额合计计算.技术需求:界面设计,循环加载数据实现函 ...
- ajax请求返回json字符串/json对象 处理
1. 返回json字符串如何处理 $.ajax({ url:xxx, success:function(date){ }, error:function(){ } }); 通过最原始的返回: Prin ...
- 045 介绍UDF,以及完成大小写的转换
一:概述 1.UDF 用户自定义函数,用java实现自定义的需求 User Defined Function-----UDF. 2.UDF的类型 udf:一进一出 udaf:多进一出 udtf:一进多 ...
- Python 枚举【一】
1. 枚举的定义 首先,定义枚举要导入enum模块. 枚举定义用class关键字,继承Enum类. 用于定义枚举的class和定义类的class是有区别[下一篇博文继续分享]. 示例代码: from ...
- 使用MSF发现主机和端口扫描
使用MSF发现主机和端口扫描 使用search命令查找需要的模块 MSF模块太多,记不住怎么办!!! 我们不需要记住所有模块,我们只要能找到我们想用的模块就行,平时积累使用的模块也行哦! 比如,我们通 ...
- 无状态shiro认证组件(禁用默认session)
准备内容 简单的shiro无状态认证 无状态认证拦截器 import com.hjzgg.stateless.shiroSimpleWeb.Constants; import com.hjzgg.st ...
- vue那些事儿
本篇文章基于vue2,vuejs不支持ie8,因为es5的Object.defineProperty特性不被ie8支持,而vue正是使用Object.defineProperty把遍历过的data属性 ...