我正在测试某个班级.该类在内部实例化一个“getmethod”对象,该对象被传递给“HttpClient”对象,该对象被注入到测试类中.

我正在嘲笑“HttpClient”类,但我还需要修改“getmethod”类的一个方法的行为.我正在玩ArgumentCaptor,但我似乎无法在“when”调用中获取实例化对象.

例:

HttpClient mockHttpClient = mock(HttpClient.class);
ArgumentCaptor<getmethod> getmethod = ArgumentCaptor.forClass(getmethod.class);
when(mockHttpClient.executeMethod(getmethod.capture())).thenReturn(HttpStatus.SC_OK);
when(getmethod.getValue().getResponseBodyAsstream()).thenReturn(new FileInputStream(source));

响应:

org.mockito.exceptions.base.MockitoException: 
No argument value was captured!
You might have forgotten to use argument.capture() in verify()...
...or you used capture() in stubbing but stubbed method was not called.
Be aware that it is recommended to use capture() only with verify()

解决方法

你不能在getmethod上使用,因为getmethod不是mock.它仍然是您的班级创建的真实对象.

ArgumentCaptor有着截然不同的目的.检查section 15 here.

您可以使您的代码更易于测试.通常,创建其他类的新实例的类很难测试.把一些工厂放到这个类来创建get / post方法,然后在test mock中修改这个工厂,并使它成为模拟get / post方法.

public class YourClass {
  MethodFactory mf;

  public YourClass(MethodFactory mf) {
    this.mf = mf;
  }

  public void handleHttpClient(HttpClient httpClient) {
    httpClient.executeMethod(mf.createMethod());
    //your code here
  }
}

然后在测试中你可以做到:

HttpClient mockHttpClient = mock(HttpClient.class);
when(mockHttpClient.executeMethod(any(getmethod.class)).thenReturn(HttpStatus.SC_OK);

MethodFactory factory = mock(MethodFactory.class);
getmethod get = mock(getmethod.class);
when(factory.createMethod()).thenReturn(get);
when(get.getResponseBodyAsstream()).thenReturn(new FileInputStream(source));

UPDATE

您还可以尝试一些讨厌的黑客,并通过反射回答和访问getmethod的私有部分;). (这真是讨厌的黑客)

when(mockHttpClient.executeMethod(any(getmethod.class))).thenAnswer(new Answer() {
  Object answer(InvocationOnMock invocation) {
    getmethod getmethod = (getmethod) invocation.getArguments()[0];

    Field respStream = HttpMethodBase.class.getDeclaredField("responseStream");
    respStream.setAccessible(true);
    respStream.set(getmethod,new FileInputStream(source));

    return HttpStatus.SC_OK;
  }
});

java – 在Mockito中捕获一个参数的更多相关文章

  1. 解析Android中的LinkedList时的java.lang.AbstractMethodError

    我想窥探android中的Linkedlist.但是,发生了异常.libs的依赖关系是甚至我将mockito-core-1.10.19.jar更新为mockito-core-2.0.31-beta.jar,问题依然存在.但是Mockito.mock还可以,我对这个问题没有任何想法.谢谢.解决方法我刚刚找到了解决问题的另一种方法.对于dexmaker1.2来说这是一个问题,我们应该升级到dexmaker1.4,dexmaker-mockito1.4并包含dexmaker-dx-1.4.所以依赖是

  2. android – 使用Mockito和Retrofit 2.0

    P.S.:我正在使用RxJava和改造,所以适用于RxJava的东西会很棒.谢谢!

  3. 如何使用Mock修改Android设备上的features

    这篇文章主要介绍了如何使用Mock修改Android设备上的features,想了解Mock的同学可以参考下

  4. Node.js服务器环境下使用Mock.js拦截AJAX请求的教程

    Mock.js这个JavaScript库最常见的用法便是被用来拦截AJAX请求,well,这里我们就来看一下Node.js服务器环境下使用Mock.js拦截AJAX请求的教程:

  5. Junit Mockito实现单元测试方法介绍

    JUnit是用于编写和运行可重复的自动化测试开源测试项目框架,这样可以保证我们的代码按与其工作。JUnit可广泛用于工业和作为支架(从命令行)或IDE(如IDE)内单独的java程序

  6. Python+ Flask实现Mock Server详情

    这篇文章主要介绍了Python+ Flask实现Mock Server详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

  7. 一文教你利用Stream API批量Mock数据的方法

    在日常开发的过程中我们经常会遇到需要mock一些数据的场景,比如说 mock 一些接口的返回或者说 mock 一些测试消息用于队列生产者发送消息。本文将教你如何通过 Stream API 批量 Mock 数据,需要的可以参考一下

  8. 详解express + mock让前后台并行开发

    这篇文章主要介绍了详解express + mock让前后台并行开发,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  9. 5分钟教你用nodeJS手写一个mock数据服务器的方法

    这篇文章主要介绍了5分钟教你用nodeJS手写一个mock数据服务器的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  10. Node.js测试中的Mock文件系统详解

    相信大家应该都知道在Node.js测试中,常常会需要构造某种项目目录。 为每个测试用例添加相应的目录结构既费时又难以维护。那么这个时候Mock文件系统就派上用场了,下面这篇文章详细的介绍了Mock文件系统,有需要的朋友们可以参考借鉴,下面来一起学习学习吧。

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部