首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mockito在调用doCallRealMethod时抛出NullpointerException

Mockito是一个Java开发中常用的测试框架,用于模拟对象和行为,以便进行单元测试。它可以帮助开发人员创建和管理测试用例中的模拟对象,以便更好地控制测试环境。

在调用Mockito的doCallRealMethod方法时抛出NullpointerException的原因可能是因为被调用的方法或对象存在空指针异常。doCallRealMethod方法用于调用被模拟对象的真实方法,而不是模拟的行为。当被模拟对象或方法中存在空指针异常时,调用doCallRealMethod方法可能会导致空指针异常的抛出。

为了解决这个问题,可以进行以下步骤:

  1. 确保被模拟对象和方法的正确性:检查被模拟对象和方法是否正确地初始化和设置。确保没有空指针异常的情况。
  2. 使用when-thenReturn语句:如果被模拟对象的方法存在空指针异常,可以使用Mockito的when-thenReturn语句来模拟方法的返回值,而不是调用真实方法。这样可以避免空指针异常的抛出。
  3. 调试和排查问题:如果以上步骤无法解决问题,可以使用调试工具来跟踪代码执行过程,查找空指针异常的具体原因。检查相关的变量和对象是否正确地初始化和使用。

总结起来,当使用Mockito的doCallRealMethod方法时抛出NullpointerException,可能是因为被模拟对象或方法存在空指针异常。需要确保被模拟对象和方法的正确性,并可以考虑使用when-thenReturn语句来模拟方法的返回值。如果问题仍然存在,可以使用调试工具进行排查。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

#Android单元测试学习总结「建议收藏」

, 用于准备测试环境(如: 初始化类,读输入流等),一个测试类中,每个@Test方法的执行都会触发一次调用 @After 定义所在方法每个测试用例执行之后执行一次,用于清理测试环境数据,一个测试类中...,一个是调用方法之后设置返回值。...() 这些函数可以适当的情况下调用when()来解决一些问题., 如当你需要下面这些功能这是必须的: 测试void函数 受监控的对象上测试函数 不只一次的测试同一个函数,测试过程中改变mock...有时,监控对象上使用when(Object)来进行打桩是不可能或者不切实际的。因此,当使用监控对象请考虑doReturn|Answer|Throw()函数族来进行打桩。...一开始方法上添加提示找不到测试方法,@PrepareForTest()括号里面指定的是要测试的目标类。

4.8K20

Mockito框架Mock Void方法

在编写代码,总是有方法返回void,并且某个测试用例需要模拟void方法。那么我们如何去做呢?让我们一起在下面的内容中使用Mockito完成这个需求。...现在,当要为该方法编写测试用例,我们如何测试B方法被调用?另外,是否将正确的参数传递给B方法?在这种情况下,Mockito可以帮助我们解决这个问题。...如何在Mockito中模拟void方法 Mockito中,我们可以使用不同的方法来调用实例方法或模拟void方法。...根据要求使用其中一个选项: doNothing():完全忽略对void方法的调用,这是默认 doAnswer():调用void方法执行一些运行时或复杂的操作 doThrow():调用模拟的 void...方法引发异常 doCallRealMethod():不要模拟并调用真实方法 使用doNothing() 如果我们只想完全忽略void方法调用,则可以使用doNothing()。

8.9K31

Android开发之逻辑单元测试

doReturn后面的when只能是一个Object类型的参数 List list = new LinkedList(); List spy = PowerMockito.spy(list); // 以下会抛出...PowerMockito.doReturn("sss").when(spy).get(0); Assert.assertEquals("sss", spy.get(0)); 以上代码,注释掉的不能用,会抛出...()方法来标记某一个方法要被真的调用: PowerMockito.doCallRealMethod().when(syncInformHandler).handle(Mockito.any(PushRequest.class...;有时候一个方法并没有返回值,所以没办法通过判断返回值的方式来验证结果是否是我们锁预期的,因此可通过检测方法中某一个子方法是否被调用过,被调用的次数来检测是否符合我们的预期: 验证public方法是否被执行过...Mockito.verify(syncKeyManager, Mockito.never()).putServerSyncKey(Mockito.anyLong(), Mockito.anyLong(

1.3K10

Mockito和PowerMock用法

单元测试中,我们往往想去独立地去测一个类中的某个方法,但是这个类可不是独立的,它会去调用一些其它类的方法和service,这也就导致了以下两个问题:外部服务可能无法单元测试的环境中正常工作,因为它们可能需要访问数据库或者使用一些其它的外部系统...一、mock测试和Mock对象 mock对象就是调试期间用来作为真实对象的替代品 mock测试就是测试过程中,对那些不容易构建的对象用一个虚拟对象来代替测试的方法就叫mock测试 二、Mockito...遇到这样情况,你可以在你能访问的地方使用MockService替代,模拟实现获取数据。...模拟测试无返回值的方法 Person person =mock(Person.class); doNothing().when(person).remove(); // 4、mockito还能对被测试的方法强行抛出异常...); Mockito.doCallRealMethod().when(mockA).goHome(); // 当需要整体执行真正部分,只有少部分方法执行mock,选用这种方式

2.8K32

Java单元测试框架之Mockito指南

doReturn(true).when(mockList).add("test2"); System.out.println(mockList.add("test2")); //true// 设置方法调用抛出异常...建议使用方法层面的验证,如:never();// 验证是否有冗余调用的时候,可使用此种方式。...基于实现类创建 mock 对象,否则在没有 stub 的情况下,调用真实方法,会出现异常。 注意点: Mockito 并不会为真实对象代理函数调用,实际上它会拷贝真实对象。...当你监控对象上调用一个没有被 stub 的函数并不会调用真实对象的对应函数,你不会在真实对象上看到任何效果 @Testpublic void test7() { // stub部分mock(stub...spy中,由于默认是调用真实方法,所以第二种写法不等价于第一种写法,不推荐这种写法。

43010

静态类参数无法传递问题

前言今天我写单元测试的时候突然发现一个奇怪的事情。我写入导入的某个断点,进入某个方法,居然发现它里面的一些参数值没有传过来。然后这一篇博客的主要目的是解释。为什么会产生这样的结果?怎么去解决?...这就对一个方法进行了mock,然后我仔细的研究之下,我还发现它提供了一个方法。你输入任意参数,它可以直接调用真实的方法。这样的话,他就可以直接把参数传递过去,你只需要在上面声明一个类型就好了。...我如如下整理了一些关于mock的详细操作。...()).thenReturn(someValue);// 对其他方法进行正常访问Mockito.when(mockObject.someMethod()).thenCallRealMethod();Mockito.doCallRealMethod...// 调用原始方法总结解铃还须系铃人,有些时候自己写的bug还是要自己去处理,可能我把这个现象描述给别人看,别人也会很懵逼的一个事情。

13400

Mockito 一个优秀的 Mock 测试框架

我们通过使用 Mock 技术可以让开发不停滞,Mock技术的作用是将服务与服务之间的依赖测试自测阶段隔离开,让开发人员自己的应用内部通过模拟的方式把需要依赖外部的接口给构造出来,从而保证不被外界的开发进度所影响...我们通过 thenReturn()方法返回 hello,当执行 get(1)操作我们抛出空指针异常,运行结果如下图所示: @Test public void testWhen() throws Exception.../设置值,通常被称为打桩 when(mockedList.get(0)).thenReturn("hello"); when(mockedList.get(1)).thenThrow(new NullPointerException...System.out.println(mockedList.get(1)); //验证有没有执行 get(0) 操作 verify(mockedList).get(0); } 可以看到当我们调用...get(0) 和 get(1) 的时候控制台成功的抛出了异常。

1.6K20

博文精选|Mockito使用指南

本文对mock框架mockito介绍得比较详细具体,值得参考。 mock和Mockito的关系 软件开发中提及”mock”,通常理解为模拟对象。 为什么需要模拟?...我们一开始学编程,我们所写的对象通常都是独立的,并不依赖其他的类,也不会操作别的类。...Mockito已经github上开源,详细请点击: https://github.com/mockito/mockito 除了Mockito以外,还有一些类似的框架,比如: EasyMock:早期比较流行的...它提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常 PowerMock:这个工具是EasyMock...mockito在这里扮演了一个为我们模拟DAO对象,并且帮助我们验证行为(比如验证是否调用了getPerson方法及update方法)的角色 Android Studio工程配置Mockito Android

4K30

SpringBoot 单元测试利器-Mockito

Mockito 是一种 Java mock 框架,他主要是用来做 mock 测试的,他可以模拟任何 Spring 管理的 bean、模拟方法的返回值、模拟抛出异常...等,了解 Mockito 的具体用法之前...而当我们引入 mock 测试,就可以创建一个假的对象,替换掉真实的 bean B 和 C,这样调用B、C的方法,实际上就会去调用这个假的 mock 对象的方法,而我们就可以自己设定这个 mock...管理的 bean、模拟方法的返回值、模拟抛出异常...等,他同时也会记录调用这些模拟方法的参数、调用顺序,从而可以校验出这个 mock 对象是否有被正确的顺序调用,以及按照期望的参数被调用 像是 Mockito...userService 的 getUserById() 的参数是 9 抛出一个 RuntimeException Mockito.when(userService.getUserById(9))...总结 Mockito 是一个非常强大的框架,可以执行单元测试帮助我们模拟一个 bean,提高单元测试的稳定性 并且大家可以尝试写代码,从 mock 测试的角度来写,更能够写出功能切分良好的代码架构

2.5K10

SpringBoot - 单元测试利器Mockito入门

而当我们引入 Mock 测试,就可以创建一个假的对象,替换掉真实的 Bean B 和 C,这样调用B、C的方法,实际上就会去调用这个假的 Mock 对象的方法,而我们就可以自己设定这个 Mock...像是 Mockito 可以单元测试中模拟一个 Service 返回的数据,而不会真正去调用该 Service,通过模拟一个假的 Service 对象,来快速的测试当前想要测试的类。...(new User()); //会返回100 ---- thenThrow 当调用 userService 的 getUserById() 的参数是 9 抛出一个 RuntimeException...注意事项 上述就是 Mockito 的 Mock 对象使用方法,不过当使用 Mockito Mock 对象,有一些限制需要遵守: 不能 Mock 静态方法 不能 Mock private 方法...不能 Mock final class 因此写代码,需要做良好的功能拆分,才能够使用 Mockito 的 Mock 技术,帮助我们降低测试 Bean 的耦合度。

14.6K42

即使不懂单元测试,会用这个工具也够了~

Mock 模拟 mock测试就是测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。 Mockito好处 无手写 : 无需自己编写模拟对象。...返回值支持 : 支持返回值 异常支持 : 支持例外 订单检查支持 : 支持检查方法调用的顺序 注释支持 : 支持使用注释创建模拟 Mockito集成 引入依赖 ...它与Mockito的verify()方法一起使用, 以获取调用方法传递的值。 @Spy 允许创建部分模拟的对象。换句话说, 它允许将现场实例快速包装在测试对象中。...user.getUsername()抛空指针 Mockito.doThrow(new NullPointerException()).when(user.getUsername());...//当调用user的时候什么事情也不用做 Mockito.doNothing().when(user); map.size(); //verify

1.6K10
领券