/*
  * 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. 性能测试十八:jmeter分布式

    一台压力机产生得压力是有限的,尤其是jmeter,java本来性能就不是很好,并发特别多的时候,jmeter的性能会急剧下降,正常的接口,若单台压力机,超过1000并发以后,jmeter的性能就不怎么 ...

  2. 向集合中添加自定义类型--建议在自定义类型的时候要重写equals方法

    package com.bjpowernode.t01list; import java.util.ArrayList; /* * 向集合中添加自定义类型 */public class TestLis ...

  3. ubuntu的常用liunx命令

    一.基本命令 1.查看Ubuntu版本 $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Descriptio ...

  4. BZOJ3674 可持久化并查集加强版 可持久化 并查集

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3674 题意概括 n个集合 m个操作操作:1 a b 合并a,b所在集合2 k 回到第k次操作之后的 ...

  5. Jedis入门

    一:介绍 1.Jedis的官网 2.使用 这个可以从上面的连接进入github. https://github.com/xetorthio/jedis 3.使用方式 或者使用jar包,不过这里我使用官 ...

  6. 001 Spark的简介以及入门

    1.hadoop,spark,Flink的比较 MapReduce: 分布式的计算框架 -> Hive 问题: shuffle:大文件的排序+读写磁盘+网络传输 => 比较慢 只有两种执行 ...

  7. 091实战 Nginx配置(日志服务器中关于日志的产生)

    一:概括 1.需要配置的概括 定义日志格式 日志的分割字段:^A 日志格式:IP地址^A服务器时间^A请求参数 配置location,记录请求日志到本地磁盘 将数据按照给定的日志格式存储到本地磁盘 二 ...

  8. (转)获取 request 中用POST方式"Content-type"是"application/x-www-form-urlencoded;charset=utf-8"发送的 json 数据

    request中发送json数据用post方式发送Content-type用application/json;charset=utf-8方式发送的话,直接用springMVC的@RequestBody ...

  9. css文字效果(文字剪贴蒙版,text-shodow的应用,文字排版等…)

    .katex { display: inline-block; text-align: initial; } .katex { font-family: Consolas, Inconsolata, ...

  10. go语言学习-函数

    函数声明 函数声明包括函数名,形参列表,返回值列表(可选),函数体组成 func test(parameters) (returns) { // ... } 其中 parameters 就是函数的形参 ...