java argument_java – 如何使用多个ArgumentCaptor参数
当我使用超过1个ArgumentCaptor参数时,我收到一个Nullpointer.可能有人知道出了什么问题?
@RunWith(PowerMockRunner.class)
@PrepareForTest(FileHelper.class)
public class MyTest {
...
@Before
public void setUp() throws Exception {
PowerMockito.mockStatic(FileHelper.class);
}
@Test
public void save() throws Exception {
ArgumentCaptor argName = ArgumentCaptor.forClass(String.class);
ArgumentCaptor argList = ArgumentCaptor.forClass(List.class);
PowerMockito.doNothing().when(FileHelper.class, "saveTextFile", argName.capture(),
argList.capture());
...
}
FileHelper类中的saveTextFile方法:
public static void saveTextFile(String filename, List data) {
...
}
如果我运行代码,我会得到以下异常:
java.lang.NullPointerException
at java.lang.Class.isAssignableFrom(Native Method)
at org.powermock.reflect.internal.WhiteboxImpl.checkIfParameterTypesAreSame(WhiteboxImpl.java:2432)
at org.powermock.reflect.internal.WhiteboxImpl.getMethods(WhiteboxImpl.java:1934)
at org.powermock.reflect.internal.WhiteboxImpl.getBestMethodCandidate(WhiteboxImpl.java:1025)
at org.powermock.reflect.internal.WhiteboxImpl.findMethodOrThrowException(WhiteboxImpl.java:948)
at org.powermock.reflect.internal.WhiteboxImpl.doInvokeMethod(WhiteboxImpl.java:882)
at org.powermock.reflect.internal.WhiteboxImpl.invokeMethod(WhiteboxImpl.java:859)
at org.powermock.reflect.Whitebox.invokeMethod(Whitebox.java:466)
at org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.when(PowerMockitoStubberImpl.java:106)
如果我调用一个只有一个参数的方法,即list参数一切正常.
最佳答案 我想你可能想用“验证”代替什么时候.
你正在设定一个期望你的模拟“无所事事”.
调用正在测试的方法然后验证您预期会发生什么事情并不是更好吗?
例如,考虑这两个类……
HelperClass.java
public class HelperClass {
public static void nastyStaticCall(String filename, List data) {
System.out.println("REAL METHOD CALLED!!");
}
}
MyClass.java
import java.util.Arrays;
public class MyClass {
public void testMethod() {
HelperClass.nastyStaticCall("FILENAME", Arrays.asList("Data"));
}
}
如果我想测试“MyClass”,我会做这样的事……
import static org.fest.assertions.Assertions.assertThat;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.verifyStatic;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.MockitoAnnotations;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest(HelperClass.class)
public class MyClassTest {
private MyClass classUnderTest;
@Captor
private ArgumentCaptor fileNameCaptor;
@Captor
private ArgumentCaptor> dataCaptor;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
mockStatic(HelperClass.class);
classUnderTest = new MyClass();
}
@Test
public void shouldMakeNastyStaticCall() {
classUnderTest.testMethod();
verifyStatic();
HelperClass.nastyStaticCall(fileNameCaptor.capture(), dataCaptor.capture());
assertThat(fileNameCaptor.getValue()).isEqualTo("FILENAME");
assertThat(dataCaptor.getValue()).containsOnly("Data");
}
}
如您所见,所有这些测试方法都会调用实际代码,然后验证是否使用正确的参数调用了辅助类.
如果您实际上期望静态方法调用返回一个值,该值将由您正在测试的方法的其余部分使用,那么您将需要使用“when”,但是当返回“void”时,您不需要做任何事.
一般来说,我个人避免在“when”条款中使用参数捕获者,并将其留在“验证”阶段.
希望这可以帮助.
java argument_java – 如何使用多个ArgumentCaptor参数相关推荐
- Java虚拟机5:常用JVM命令参数
这里汇总一些平时用到的.看到的一些虚拟机参数: (1)-Xms20M 表示设置堆容量的最小值为20M,必须以M为单位 (2)-Xmx20M 表示设置堆容量的最大值为20M,必须以M为单位.将-Xmx和 ...
- java canonicalize_java.io.IOException:java.io.WinNTFileSystem.canonicalize0处的无效参数
我正在使用Eclipse Mars和Tomcat v8.0.30,jre 1.8.0_73.昨天我没有任何问题,但今天我的Tomcat服务器无法启动.弹出一个对话框,它说:"开始在本地主机的 ...
- Java多线程之线程池7大参数、底层工作原理、拒绝策略详解
Java多线程之线程池7大参数详解 目录 企业面试题 线程池7大参数源码 线程池7大参数详解 底层工作原理详解 线程池的4种拒绝策略理论简介 面试的坑:线程池实际中使用哪一个? 1. 企业面试题 蚂蚁 ...
- 在JAVA语言程序中main_在Java程序main方法中,正确的参数是
[单选题]下列叙述中,错误的是 [填空题]Access属于()数据库,Access中,不允许在主关键字字段中有重复值或(). [单选题]如下哪些字符串是Java中的标识符? [填空题]常用的基本电量传 ...
- java分布式对象——远程方法中的参数和返回值+远程对象激活
[0]README 1)本文文字描述转自 core java volume 2, 旨在学习 java分布式对象--远程方法中的参数和返回值+远程对象激活 的相关知识: [1]远程方法中的参数和返回值 ...
- java定义一个空数组_一个 Java 方法,最多能定义多少参数?
点击上方"JAVA",星标公众号重磅干货,第一时间送达 文链接:http://justinblank.com/experiments/howmanytypeparametersca ...
- 什么是Java / JVM中的-Xms和-Xms参数(已更新至Java 13)
什么是Java / JVM中的-Xms和-Xms参数(已更新至Java 13) 简而言之, Xmx指定应用程序可用的最大堆大小 Xms指定应用程序可用的最小堆大小 这些是Java虚拟机(JVM)参数, ...
- java 调用webservice 接口,并解析返回参数
java 调用webservice 接口,并解析返回参数 1. 设置传参,例如以下格式: // 确定传参格式以及赋值 String reqXml = "<createAppParam& ...
- Java实现微信公众号直接发送参数二维码给用户
文章目录 前言 一.参数二维码的作用 二.功能实现 1. 生成带参数二维码 2. 上传二维码图片 3. 发送带参数二维码给用户 总结 前言 公众号开发近些年是一个比较热门的方向,今天为大家讲解的是用J ...
最新文章
- 猜数游戏python_Hello,Python!小鲸教你学Python(九)之文件操作
- web中用纯CSS实现筛选菜单
- 5.2 使用pytorch搭建GoogLeNet网络 笔记
- xhprof windows下安装和使用(windows版本)
- python中内置的集成开发工具_python应用(3):启用集成开发工具pycharm
- IDEA或Webstorm设置Terminal终端字体大小
- 针对视觉位姿估计特征点优化问题的详细研究
- 在线PS(PhotoShop),打开PSD文件,图像处理
- Atitit java onvif 开源类库 getProfiles getStreamUri
- 正则只能输入数字java_正则表达式限制输入字符,数字,汉字等
- 新建samba配置步骤
- 三维激光LiDAR点云数据处理,我帮您!
- 音频系统测试软件:Smaart for Mac
- 5.4.1. Check Constraints
- 缠中说禅电子书_缠中说禅操盘术(高清) PDF 赵信 著
- p2p-如何拯救k8s镜像分发的阿喀琉斯之踵
- 囍游记----[转_]
- svn错误svn: E170000: Unrecognized URL scheme for http
- 一文简述BSD,System V ,POSIX,SUS版本历史, 以及glibc移植的特性测试宏
- 数据库学习笔记04——关系数据库2
热门文章
- JSbridge原理
- 【MATLAB】MATLAB 仿真模拟调制系统 — FM 系统
- ADB命令汇总 机顶盒相关操作
- 万字连载(上):如何 Bringup SoC 芯片
- Unity音频采样器(用于Unity音乐可视化)
- C语言有简单基础的入手指南(MOOC课程 浙大 翁凯老师主讲)听课笔记 the basic knowledge of C
- nginx安装部署(实操)
- 哈密尔顿算法matlab,[求助]关于哈密尔顿函数
- 米尔科技ZYNQ-7z020学习(1)
- 万象物语找回服务器,万象物语网络连接线异常怎么办 登录不上游戏解决方法...