/*
  * 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获取入参数并动态设置返回值的更多相关文章

  1. 常量函数、常量引用参数、常量引用返回值[C++]

    1. 关于常量引用正像在C语言中使用指针一样,C++中通常使用引用 有一个函数... foo()并且这个函数返回一个引用...... & foo()...., 一个指向位图(Bitmap)的引 ...

  2. 使用 ResponseBodyAdvice 拦截Controller方法默认返回参数,统一处理返回值/响应体

    使用 @ControllerAdvice & ResponseBodyAdvice 拦截Controller方法默认返回参数,统一处理返回值/响应体 1.Controller代码 以下是Con ...

  3. day03 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数

    本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测 ...

  4. Java程序调用带参数的shell脚本返回值

    Java程序调用带参数的shell脚本返回值 首先来看看linux中shell变量(\(#,\)@,$0,$1,\(2)的含义解释 变量说明: -  \)$  Shell本身的PID(ProcessI ...

  5. JQuery/JS select标签动态设置选中值、设置禁止选择 button按钮禁止点击 select获取选中值

    //**1.设置选中值:(根据索引确定选中值)**// var osel=document.getElementById("selID"); //得到select的ID var o ...

  6. c++11之获取模板函数的参数个数和函数返回值类型

    本文演示c++需要支持c++11及以上标准 获取参数个数 1.模板函数声明 template <class R, class... Args> R getRetValue(R(*)(Arg ...

  7. c语言main函数返回值、参数详解(返回值是必须的,0表示正常退出)

    C语言Main函数返回值 main函数的返回值,用于说明程序的退出状态.如果返回0,则代表程序正常退出:返回其它数字的含义则由系统决定.通常,返回非零代表程序异常退出. 很多人甚至市面上的一些书籍,都 ...

  8. c++特性:指向类成员的指针和非类型类模板参数和函数指针返回值 参数推导机制和关联型别

    一.c++允许定义指向类成员的指针,包括类函数成员指针和类数据成员指针 格式如下: class A { public: void func(){printf("This is a funct ...

  9. [android] setOnTouchEvent 设置返回值为true 和 false的区别

    今天在做自定义的可选文本的 TextView 类时,用到了 View 类的 setOnTouchListener(OnTouchListener l)事件监听,在构造 OnTouchListener ...

随机推荐

  1. 【gearman】学习笔记

    学习资料:http://gearman.org/manual/ 1.Gearman是跨语言的,client和worker可以用不同的语言来实现 2.client与job server之间的交互称为ta ...

  2. 关于java中Stream理解

    关于java中Stream理解 Stream是什么 Stream:Java 8新增的接口,Stream可以认为是一个高级版本的Iterator.它代表着数据流,流中的数据元素的数量可以是有限的, 也可 ...

  3. css 文件连接不到网页

    css 文件连接不到网页 编码错误,将编码改为utf-8 Rom后正常

  4. SPLAY,LCT学习笔记(四)

    前三篇好像变成了SPLAY专题... 这一篇正式开始LCT! 其实LCT就是基于SPLAY的伸展操作维护树(森林)连通性的一个数据结构 核心操作有很多,我们以一道题为例: 例:bzoj 2049 洞穴 ...

  5. 《剑指offer》-青蛙跳台阶II

    一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 其实题目很水...就是一个等比数列通项公式嘛 f(0)=1 f(1)=1 f(n)=f( ...

  6. C#学习网站收集

    1. 大名鼎鼎的CodeGuru 号称代码领头羊 非常著名的关于程序开发的网站,大量的资料.强烈推荐 http://www.codeguru.com/ - 外文 2. Developer.com: A ...

  7. Kibana加载样本数据

    kibana 6.2 加载样本数据 kibana loading sample data 下载样本数据 # 莎士比亚经典作品 wget https://download.elastic.co/demo ...

  8. Codeforces 1000F One Occurrence 主席树|| 离线+线段树

    One Occurrence 为什么我半年前这么菜呀, 这种场只A三题... 我们在主席树 || 线段树上维护每个数的右边和它一样的数在哪里, 然后就变成了区间求最大值. 注意加进去的时候要把它右边一 ...

  9. kuangbin 区间dp

    A - Cake 题目大意:给你一个n个顶点(n<=100)的多边形和每两个点连边的消耗,让你求把这个多边形全部切成三角形所需要的最小消耗,如果这个多边形为凹多边形则输出无解. 思路:先求一个凸 ...

  10. 暴力破解工具hydra与Medusa

    ---恢复内容开始--- 暴力破解工具hydra与Medusa 内容 (一)hadry (二)Medusa (一)hydra 选项 -l LOGIN 指定破解的用户名称,对特定用户破解. -L FIL ...