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

为什么Mockito verifyNoMoreInteractions在Scala默认值上有问题

Mockito是一个用于Java开发的单元测试框架,用于模拟对象和验证对象之间的交互。它提供了一组强大的工具和方法,用于创建和管理模拟对象,并验证它们的交互。

在Scala中,默认值是通过Option类型来表示的,它可以是Some(value)或者None。Mockito的verifyNoMoreInteractions方法用于验证模拟对象的方法是否已经被调用,并且没有其他未验证的交互。然而,在Scala中,当模拟对象的方法返回默认值None时,Mockito的verifyNoMoreInteractions方法可能会出现问题。

这是因为在Scala中,None是一个特殊的对象,它实际上是一个单例对象。当模拟对象的方法返回None时,Mockito可能会将其视为已经调用过的交互,从而导致验证失败。

为了解决这个问题,可以使用Mockito的stub方法来指定模拟对象方法的返回值。例如,可以使用when(mock.method()).thenReturn(None)来明确指定返回值为None。这样,Mockito就能正确地验证模拟对象的交互。

另外,如果你在使用Scala进行单元测试时遇到了这个问题,也可以考虑使用其他的Scala专用的单元测试框架,如ScalaTest或Specs2。这些框架对Scala的特性有更好的支持,可能能够更好地处理这种情况。

总结起来,Mockito的verifyNoMoreInteractions方法在Scala的默认值上可能会出现问题,可以通过使用stub方法明确指定返回值来解决。另外,也可以考虑使用其他Scala专用的单元测试框架来处理这种情况。

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

相关·内容

博文精选|Mockito使用指南

本文对mock框架mockito介绍得比较详细具体,值得参考。 mock和Mockito的关系 软件开发中提及”mock”,通常理解为模拟对象。 为什么需要模拟?...Mockito已经github上开源,详细请点击: https://github.com/mockito/mockito 除了Mockito以外,还有一些类似的框架,比如: EasyMock:早期比较流行的...和Mockito上扩展出来的,目的是为了解决EasyMock和Mockito不能解决的问题,比如对static, final, private方法均不能mock。...其实测试架构设计良好的代码,一般并不需要这些功能,但如果是已有项目上增加单元测试,老代码有问题且不能改时,就不得不使用这些功能了 JMockit:JMockit 是一个轻量级的mock框架是用以帮助开发人员编写测试程序的一组工具和...verify(mockedList).get(0); } 对于stubbing,有以下几点需要注意: 对于有返回值的方法,mock会默认返回null、空集合、默认值

4.1K30

Mockito模拟进行单元测试

1.2 为什么需要Mock 测试驱动的开发( TDD)要求我们先写单元测试,再写实现代码。...写单元测试的过程中,我们往往会遇到要测试的类有很多依赖,这些依赖的类/对象/资源又有别的依赖,从而形成一个大的依赖树,要在单元测试的环境中完整地构建这样的依赖,是一件很困难的事情。...comparable.compareTo("Test")); assertEquals(2, comparable.compareTo("Omg")); //对于没有预设的情况会返回默认值...(list,times(2)).add(anyInt()); //检查是否有未被验证的互动行为,因为add(1)和add(2)都会被上面的anyInt()验证到,所以下面的代码会通过 verifyNoMoreInteractions..."); Mock对象的时候,创建一个proxy对象,保存被调用的方法名(get),以及调用时候传递的参数(0),然后调用thenReturn方法时再把“first”保存起来,这样,就有了构建一个stub

6.8K20

Mockito模拟进行单元测试

1.2 为什么需要Mock 测试驱动的开发( TDD)要求我们先写单元测试,再写实现代码。...写单元测试的过程中,我们往往会遇到要测试的类有很多依赖,这些依赖的类/对象/资源又有别的依赖,从而形成一个大的依赖树,要在单元测试的环境中完整地构建这样的依赖,是一件很困难的事情。...comparable.compareTo("Test")); assertEquals(2, comparable.compareTo("Omg")); //对于没有预设的情况会返回默认值...(list,times(2)).add(anyInt()); //检查是否有未被验证的互动行为,因为add(1)和add(2)都会被上面的anyInt()验证到,所以下面的代码会通过 verifyNoMoreInteractions..."); Mock对象的时候,创建一个proxy对象,保存被调用的方法名(get),以及调用时候传递的参数(0),然后调用thenReturn方法时再把“first”保存起来,这样,就有了构建一个stub

9.3K20

单元测试指南

Mockito 软件开发中提及Mock,通常理解为模拟对象。为什么需要模拟? 我们一开始学编程时,我们所写的对象通常都是独立的,并不依赖其他的类,也不会操作别的类。...**PowerMock**:这个工具是 EasyMock 和 Mockito 上扩展出来的,目的是为了解决 EasyMock 和 Mockito 不能解决的问题(比如对static, final, private...(mockedList); 一些用户可能会在频繁地使用verifyNoMoreInteractions(),甚至每个测试函数中都用。...但是verifyNoMoreInteractions()并不建议每个测试函数中都使用。...verifyNoMoreInteractions()交互测试套件中只是一个便利的验证,它的作用是当你需要验证是否存在冗余调用时。滥用它将导致测试代码的可维护性降低。

6.1K20

测试利器之Mock server

为什么要用Mock? ? Mock本意就是模拟或者效仿。我们可以把Mock理解为一个替身,软件开发领域,通常就是指模拟对象。 Mock是为了解决不同的单元之间由于耦合而难于开发、测试的问题。...Mockito 无需准备昂贵的前期启动。他们的目标是透明的,让开发人员专注于测试选定的行为。Mockito 拥有的非常少的 API,所有开始使用 Mockito,几乎没有时间成本。...只要记住,执行前 stub,而后交互中验证。你很快就会发现这样 TDD java 代码是多么自然。 ? 为什么用Moco?...code的方式 支持http REST Socket等协议,支持API和独立运行两种方式,可以植入单元测试中 代码开源(https://github.com/dreamhead/moco) 支持Maven scala...shell Gradle等集成 使用过程中遇到的问题

6K30

Java Web技术经验总结(一)

id,主键,自增 按照字段的使用频率依次定义(字段的顺序为什么重要:); 可为空的字段要提供默认值; 修改时间(mtime) 创建时间(ctime) 索引和约束(强文推荐:如何应对并发(1):关于数据索引...敏捷开发并不是野蛮开发,最关键的特性是小步快跑,作为开发者,还是要从下列几个方面考虑问题: 需求评审,产出需求文档 设计评审,产出设计文档 代码开发(尽量使用最佳实践,注意要写基本的单元测试) 基本功能开发...中不能通过new一个实例来使用,否则在mockito测试的时候没法预设行为;spring中要使用其他组件,必须通过xml或者注解方式,由spring容器负责装配。...单元测试,推荐使用Mockito框架,理由有三:(1)可专注于被测试对象;(2)不需要建立复杂的bean依赖关系;(3)DSL描述性语言简单易懂。...参考文章:反模式的经典 - Mockito设计解析 项目开发中,建议配合使用Mockito和Assertj写单元测试。

43820

Java单元测试Mock工具Mockito介绍

一、什么是Mock&为什么要Mock Mock就是测试过程中对于那些不容易构建的依赖进行模拟,以保证系统的测试流程可以正常运行,即生成一个和实际使用场景不一样的对象; 为什么需要Mock呢?...1、测试环境中构建一些依赖的成本比较高 如一些硬件的操作,像串口和USB输入; 还有一些第三方依赖,像支付系统要调用很多外部支付网关,如果直接调用生产环境的网关就会产生脏数据的问题;...肯定是要测试的,不过分开来测,一部分测试软件上的流程,即从硬件输入后系统的处理流程是否正常,一些异常下数据是否准确;而硬件输入的测试可以由单独的团队测试,这样就可以并行测试提高效率。...userService.findUser(post.getUserId()); if (user.isDisabled()){ //用户被禁用 } } } 上面是个简单的例子,添加帖子的时候需要调用用户服务来查询用户信息...; 3、模拟静态方法 如果要用Mockito模拟静态方法,一是要保证Mockito包版本3.4.0以上,二是需要额外加mockito-inline依赖,如下: <

3.2K40

Java Web技术经验总结

id,主键,自增 按照字段的使用频率依次定义(字段的顺序为什么重要:); 可为空的字段要提供默认值; 修改时间(mtime) 创建时间(ctime) 索引和约束(强文推荐:如何应对并发(1):关于数据索引...敏捷开发并不是野蛮开发,最关键的特性是小步快跑,作为开发者,还是要从下列几个方面考虑问题: 需求评审,产出需求文档 设计评审,产出设计文档 代码开发(尽量使用最佳实践,注意要写基本的单元测试) 基本功能开发...中不能通过new一个实例来使用,否则在mockito测试的时候没法预设行为;spring中要使用其他组件,必须通过xml或者注解方式,由spring容器负责装配。...单元测试,推荐使用Mockito框架,理由有三:(1)可专注于被测试对象;(2)不需要建立复杂的bean依赖关系;(3)DSL描述性语言简单易懂。...参考文章:反模式的经典 - Mockito设计解析 项目开发中,建议配合使用Mockito和Assertj写单元测试。

56850

超全!我整理一波最常用的开源项目

任务调度/定时任务 任务调度/定时任务系统中应用太广泛了。为什么需要任务调度/定时任务呢? 时间驱动处理场景:整点发送优惠券,每天更新收益,每天刷新标签数据和人群数据。...MyCat 是一些社区爱好者阿里 Cobar 的基础上进行二次开发,解决了 Cobar 当时存 的一些问题,并且加入了许多新的功能在其中。...Mockito[59] :Mockito 是一个模拟测试框架,可以让你用优雅,简洁的接口写出漂亮的单元测试。...(对那些不容易构建的对象用一个虚拟对象来代替,使其调试期间用来作为真实对象的替代品) PowerMock[60] :编写单元测试仅靠 Mockito 是不够。...Smile[65] :基于 Java 和 Scala 的机器学习库。 相关阅读: Java 能用于机器学习和数据科学吗?

1.6K21

单元测试组件Mockito

铛铛铛~这时候Mockito出现了(java中Mock框架比较多,但是本篇只介绍这个),它会把那些繁琐的依赖统统转化为Mock Object,如下图,这样我们就可以专注的进行我们的单测,减少解决依赖上浪费的时间了...maven依赖 org.mockito mockito-core...System.out.println(mockList.get(0)); } mock静态方法会创建一个Mock对象,由于 Mock对象 并不会真的执行方法中的代码,所以如果未指定返回值的话会返回默认值...第九、十行我们指定了mockList执行特定方法后需要返回的值,所以assertTrue校验是没问题的,但是add("李四"),我们并没设置,所以是false。...times(2)).someMethod(); verify(mock, timeout(100).atLeast(2)).someMethod(); 通过超时检测可以校验我们的方法逻辑会不会有出现问题而导致超时的地方

4K30

使用 Junit + Mockito 实践单元测试

用于清理测试环境(例如,删除临时数据,恢复默认值) @BeforeClass 用于 static方法,在所有测试开始之前执行一次。...它用于执行耗时的活动,例如:连接到数据库 @AfterClass 用于 static方法,完成所有测试之后,执行一次。...而这正是 Mockito 的使命,Mockito 是一个流行的 mock 框架,可以与 JUnit 结合使用,Mockito 允许我们创建和配置 mock 对象,使用 Mockito 将大大简化了具有外部依赖项的类的测试开发...测试中使用 Mockito,通常会: mock 外部依赖关系并将 mock 对象插入待测代码 执行被测代码 验证代码是否正确执行 ?...Mockito 也有一些局限性。例如:不能 mock 静态方法和私有方法。有关详细信息,请参阅 Mockito限制的常见问题解答。

4.5K50

如何正确编写单元测试?

为什么呢?因为刚开发第一版软件系统时,需求并不复杂,场景也不是很多,因此实现起来比较简单,再加上测试小哥哥/小姐姐保驾护航,基本不会出现比较严重的bug。...测试金字塔 针对上述问题,业界有一套公认的指导方案——测试金字塔。...它将测试步骤分为多个层次,每个层次关注不同的测试内容,对于层次的划分,网上有很多种方式,但无一例外,它们最底层都是单元测试,由此可见,编写单元测试是多么的重要。...系统重构时,这一点尤为重要 Mockito的基础用法 上述例子仅仅完成了一个及其普通的单元测试,但是我们大多数的业务场景往往不那么简单,我们可能需要查询数据库、可能需要调用三方接口、也可能需要依赖其他组件...这个时候我们面临的第一个问题就出来了:如何在单元测试中屏蔽掉这些外来因素的影响?于是Mockito被引入进来,使用Mockito,我们可以模拟一些对象的行为使其返回特定的数据。

2.4K40

Mockito入门:如何在Spring中Mock部分对象

Mock服务可以依赖于一些框架来实现,最经典的就是Mockito为什么最近专门来研究一下Mock对象的方法,是因为之前为了Mock下游服务直接修改了源代码中的实现。...return userInfo; } } 紧接着,问题来了。自测完成之后,我忘记了将源代码中的注释内容恢复,直接将Mock实现提交到了代码仓库中。...由此,我开始了解如何在不修改源代码的情况下,对服务进行Mock,避免下一次再出现这样的问题Mockito Mockito是Java单元测试中使用率最高的Mock框架之一。...但是,Spring同样作为IOC框架,和Mockito的融合存在一定的问题。即如果需要对Spring Bean中的部分依赖进行Stub时,需要手动的去设置。...但是,我实验的过程中遇到了问题,即@InjectMocks如果想要标记在接口上,则该接口必须手动初始化,否则会抛出无法初始化接口的异常。

10.7K20

合格的后端Coder都应该写好UT和Mock测试

3 为什么要写 UT 让你的代码质量更可靠&让你对代码结构更加敏感&迫使你写更优质的代码&… 4 为什么不写 UT !...${为什么要写 UT} 5 什么阻止你写 UT 代码本身的原因 如果代码复杂度较高还缺少必要的抽象和拆分,就会让人对写 UT 望而生畏。...比如我个人比较喜欢 Mockito: 第一它相对于其他几个老牌库来说比较新并且更新活跃, github 中引用的也最多 第二它的 fluent API 风格的代码可读性很高跟 JDK8 的 Stream...项目里无论用了哪个测试框架都不能解决代码本身难以测试的问题,所以如果你遇到的是“我的代码里依赖的东西太多了所以写不出来单测”这样的问题的话,需要去看的是如何设计和重构代码,而不是这篇文章。.../mockito/wiki/What%27s-new-in-Mockito-2 ( https://github.com/mockito/mockito/wiki/What%27s-new-in-Mockito

60410

2018年Java程序员应该学习的9件事

如果你不能分析一个应用程序,或者找不出它为什么变慢或者如何使它提速,那么你应该读一本关于JVM内部和性能调优的好书,比如ScottOaks的畅销书《Java性能最终指南》。...至少,可以项目、开源框架、库或实用程序上写一些东西。你还可以破解编码150个编程面试问题。这将提高你对数据结构、算法和编程逻辑的了解。 3....image.png 互联网上有许多网站存在编程上的挑战,给你机会来测试你的技能,TopCoder就是不错的选择。 5....我从我的Java网络编程问题列表中提出了许多问题,但大多数开发人员都未能回答大部分问题。...Mockito非常强大,它允许你通过模拟依赖项和关注被测试对象来为复杂类编写单元测试。如果你是单元测试的初学者,那么JUnit和Mockito对你来说就是一个很好的起点。

54800

2021年大数据常用语言Scala(二十八):scala面向对象 MAVEN依赖和类

} } var name:String = _,_表示使用默认值进行初始化 String类型默认值是null,Int类型默认值是0,Boolean类型默认值是false... val变量不能使用_来进行初始化...,因为val是不可变的,所以必须手动指定一个默认值 main方法必须要放在一个scala的object(单例对象)中才能执行 getter/setter - 了解 问题1: 上述的案例,创建出来一个Customer...为了验证上述问题,我们需要反编译scala编译出来的class文件,看一看最终编译器出来的字节码是什么样的。...可以,字段上加上@BeanProperty就可以了。   ...会自动为成员变量生成scala语言的getter/setter scala的getter为字段名(),setter为字段名_=() 要生成Java的getter/setter,可以成员变量上加一个@BeanProperty

36030

Spock单元测试框架以及美团优选的实践

Spock is inspired from JUnit, RSpec, jMock, Mockito, Groovy, Scala, Vulcans, and other fascinating life...之所以能够众多测试框架中脱颖而出,是因为它优美而富有表现力的规范语言。Spock的灵感来自JUnit、RSpec、jMock、Mockito、Groovy、Scala、Vulcans。...为什么使用Spock? Spock和JUnit、jMock、Mockito的区别在哪里? 总的来说,JUnit、jMock、Mockito都是相对独立的工具,只是针对不同的业务场景提供特定的解决方案。...最后test getStudentByIdStatic测试方法里对convert2Abbreviation()方法指定返回默认值:PowerMockito.when(AbbreviationProvinceUtil.convert2Abbreviation...不仅耗时时间长,而且一旦依赖环境上有任何问题,可能会影响启动,进而影响DAO层的测试。

3.2K20
领券