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

为什么Mockito会为这段代码抛出一个"InvalidUseOfMatchersException“?

Mockito会为这段代码抛出一个"InvalidUseOfMatchersException"的原因是因为在使用Mockito进行测试时,使用了错误的参数匹配器(Matchers)。Mockito要求在使用参数匹配器时,必须使用特定的方法进行匹配,而不是直接在方法调用中使用参数匹配器。

例如,假设有以下代码片段:

代码语言:txt
复制
List<String> mockedList = mock(List.class);
when(mockedList.get(anyInt())).thenReturn("element");

在这个例子中,anyInt()是一个参数匹配器,用于匹配任意整数。但是,如果将参数匹配器直接放在方法调用中,如下所示:

代码语言:txt
复制
when(mockedList.get(anyInt())).thenReturn("element");

这将导致Mockito抛出"InvalidUseOfMatchersException"异常。正确的用法是使用特定的方法来包装参数匹配器,如下所示:

代码语言:txt
复制
when(mockedList.get(Mockito.anyInt())).thenReturn("element");

这样就可以正确地使用参数匹配器进行测试。

总结起来,Mockito会抛出"InvalidUseOfMatchersException"异常是因为在使用参数匹配器时,没有使用正确的方法进行包装。正确的用法是使用特定的方法来包装参数匹配器,以确保测试的正确性。

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

相关·内容

SpringBoot - 单元测试利器Mockito入门

---- What’s Mockito Mockito 是一种 Java Mock 框架,主要就是用来做 Mock 测试的,它可以模拟任何 Spring 管理的 Bean、模拟方法的返回值、模拟抛出异常等等...当我们创建了一个假的 userDao 后,我们需要为这个 mock userDao 自定义方法的返回值,这里有一个公式用法,下面这段代码的意思为,当调用了某个 Mock 对象的方法时,就回传我们想要的自定义结果...(new User()); //会返回100 ---- thenThrow 当调用 userService 的 getUserById() 时的参数是 9 时,抛出一个 RuntimeException...(); //会抛出一个RuntimeException ---- verify 检查调用 userService 的 getUserById()、且参数为3的次数是否为1次。...不能 Mock final class 因此在写代码时,需要做良好的功能拆分,才能够使用 Mockito 的 Mock 技术,帮助我们降低测试时 Bean 的耦合度。

17.1K42

SpringBoot 单元测试利器-Mockito

Mockito 是一种 Java mock 框架,他主要是用来做 mock 测试的,他可以模拟任何 Spring 管理的 bean、模拟方法的返回值、模拟抛出异常...等,在了解 Mockito 的具体用法之前...userDao 后,我们需要为这个 mock userDao 自定义方法的返回值,这里有一个公式用法,下面这段代码的意思为,当调用了某个 mock 对象的方法时,就回传我们想要的自定义结果 Mockito.when...user = userService.getUserById(9); //会抛出一个RuntimeException 如果方法没有返回值的话(即是方法定义为public void myMethod(...总结 Mockito 是一个非常强大的框架,可以在执行单元测试时帮助我们模拟一个 bean,提高单元测试的稳定性 并且大家可以尝试在写代码时,从 mock 测试的角度来写,更能够写出功能切分良好的代码架构...,像是如果有把专门和外部服务沟通的代码抽出来成一个 bean,在进行单元测试时,只要透过 Mockito 更换掉那个 bean 就行了

3.9K20
  • Java 邮件发送超时时间问题及优化方案详解!

    :如下是具体的代码解析,希望对大家有所帮助:这段Java代码定义了一个名为 testEmailSendSuccess 的单元测试方法,目的是验证邮件发送操作是否能够成功执行。...下面是这段代码的详细解读:@Test:这是一个JUnit注解,表示接下来的方法是测试方法。...,希望对大家有所帮助:这段Java代码定义了一个名为 testEmailTimeout 的单元测试方法,目的是模拟发送邮件时的超时场景,并验证是否能够捕获到超时异常。...下面是这段代码的详细解读:@Test:这是一个JUnit注解,表示接下来的方法是测试方法。...确保邮件发送器抛出的异常包含明确的错误信息。明确设置邮件发送的超时时间。示例代码(使用Mockito):import static org.mockito.Mockito.

    19921

    100%代码覆盖率的悲剧

    不过,最近我发现自己对于测试的想法开始改变,现在我更经常说的是:“这段代码(模块)为什么要进行测试?“而不是“这段代码应该进行测试”。...“不测试我怎么知道这段代码能运行啊?” “这段代码的功能看起来很简单,没有条件,没有循环,没有转换,没有任何复杂的东西,只是一段简单的代码。”...“但任何人都可能会来更改这段代码啊,若不测试怎么能知道这段代码有没有被动过!” “好,那我们假设有人想改动这段代码,他会做什么?他只会删除它。“ “但是如果必须要进行测试,你怎么写?”...通过观察代码,我发现以下Cucumber测试: 如果您以前使用过Cucumber测试 ,你就不会对如何多的支持代码感到惊讶了: 所有这些都需要测试: 是的,这只是一个简单的map查找。...但我们很少人意识到另一个极端会带来什么问题:即达到100%代码覆盖率或者一切项目都是TDD模式开发。单元测试是一个非常好的做法,但我们应该分辨哪些测试是有用的,哪些是适得其反的。

    98170

    100%代码覆盖率的悲剧

    不过,最近我发现自己更常说:“你为什么要写测试?“而不是“你应该写测试”。 到底是怎么回事? 在办公室周围走走时,开发人员要求我帮助他进行单元测试。...看来他在使用Mockito测试以下代码时遇到了麻烦: 当我回应:“你不需要测试。”,他感到非常惊讶。 “但我不得不测啊!” 他说。“不测试我怎样知道这段代码能运行啊?”...“这段代码的功能看起来很简单,没有条件,没有循环,没有转换,没有任何复杂的东西,只是一段简单的老胶水代码。 “但不测试的话,任何人都可以来更改这段代码啊!”...另一个例子 我被开发新应用程序的高代码覆盖率以及他们对BDD(行为驱动设计)的新发现所吸引。...我们已经有了一个极端的经验:开发有0个单元测试的项目,我们知道这样做所带来的痛苦。通常我们缺乏的是另一个极端的经验:开发100%代码覆盖率和一切都是TDD的项目。

    944100

    如何正确编写单元测试?

    经过一段时间的研究,总算对单元测试有了一个大概的了解,然而网上的文章零零散散,大多是讲解一些比较简单的demo,参考价值比较有限,因此我决定写一篇关于单元测试的文章来总结自己这段时间的收获与心得。...为什么呢?因为刚开发第一版软件系统时,需求并不复杂,场景也不是很多,因此实现起来比较简单,再加上测试小哥哥/小姐姐保驾护航,基本不会出现比较严重的bug。...这个时候我们面临的第一个问题就出来了:如何在单元测试中屏蔽掉这些外来因素的影响?于是Mockito被引入进来,使用Mockito,我们可以模拟一些对象的行为使其返回特定的数据。...这是一个较为简单的业务方法,该方法的功能是将用户标记为商家类型,为了使大家看起来更方便一些,我将每行代码都加了注释,大家可以看到这个方法其实存在多种不同的行为: 当业务执行成功时返回true 当数据库查询不到用户信息时抛出...Junit4、Junit5:单元测试运行框架 Mockito、Wiremock:mock框架,用来模拟一些对象行为 SonarQube:代码静态扫描平台,可以通过静态扫描检查代码漏洞、代码规范、代码重复率

    3K40

    100%代码覆盖率的悲剧

    不过,最近我发现自己更常说:“你为什么要写测试?“而不是“你应该写测试”。 到底是怎么回事? 在办公室周围走走时,开发人员要求我帮助他进行单元测试。...看来他在使用Mockito测试以下代码时遇到了麻烦: ? 当我回应:“你不需要测试。”,他感到非常惊讶。 “但我不得不测啊!” 他说。“不测试我怎样知道这段代码能运行啊?”...“这段代码的功能看起来很简单,没有条件,没有循环,没有转换,没有任何复杂的东西,只是一段简单的老胶水代码。 “但不测试的话,任何人都可以来更改这段代码啊!”...另一个例子 我被开发新应用程序的高代码覆盖率以及他们对BDD(行为驱动设计)的新发现所吸引。观察代码,我们发现以下Cucumber测试: ?...我们已经有了一个极端的经验:开发有0个单元测试的项目,我们知道这样做所带来的痛苦。通常我们缺乏的是另一个极端的经验:开发100%代码覆盖率和一切都是TDD的项目。

    70320

    Mockito模拟进行单元测试

    1.2 为什么需要Mock 测试驱动的开发( TDD)要求我们先写单元测试,再写实现代码。...1.3 Stub和Mock异同 相同:Stub和Mock都是模拟外部依赖 不同:Stub是完全模拟一个外部依赖, 而Mock还可以用来判断测试通过还是失败  1.4 Mockito资源 官网: http.../mockito/mockito 1.5 使用场景 提前创建测试; TDD(测试驱动开发) 团队可以并行工作 你可以创建一个验证或者演示程序 为无法访问的资源编写测试 Mock 可以交给用户 隔离系统...list2.add(1); list2.add(2); verify(list2).add(1); //检查是否有未被验证的互动行为,因为add(2)没有被验证,所以下面的代码会失败抛出异常...”保存起来,这样,就有了构建一个stub方法所需的所有信息,构建一个stub。

    9.5K20

    利用 Junt 维护代码质量

    回调等流程的UT,按正常流程根本无法写; 3.针对业务逻辑的异常处理等的代码覆盖很困难 有时写UT时发现有些代码是永远不可能覆盖到废代码,有些代码也根本不会抛出接口中声明的异常等 如以下这段,有些异常,...,因此UT也需要维护 假设有一个业务突然变更,那原来代码逻辑更新,写好的UT回归测试必然过不了,那么UT也需要更变,因此 UT也需要跟着代码一起维护,维护成本也比较高; 五、如何真正的使用UT达到我们的要求...说了这么多UT的难点,相信我们已知道写UT固然不是信手拈来的活,但为什么还要写,能为我们带来什么好处吗?..., 上线分支必须达到: 所有UT方法100%成功 UT的代码覆盖率>=80% 自从保证了这两个点,我们组的bug几乎没有了,而且功能性bug几乎一个都没有,因此确实是奇效,后来整个公司要求,当然业务组相应要求低一点...设置要mock的接口 Mockito.when(userService.getUserByName(Mockito.anyString())).thenReturn(userDto);

    62710

    MeterSphere单元测试-Mockito-Inline出场

    以下是上述用例执行之后对添加测试计划的一个代码覆盖率。 ? 可以看到,由于只是调用了TestPlanService的addTestPlan方法,整体这个Service类的覆盖率还是比较低的。...补充用例1-测试计划名称重复异常 来看一下addTestPlan中中第一个if的代码。从设计上来讲,这是一个哨兵断言,当存在重复的测试计划名称时,可以直接抛异常退出,提高程序处理效率。...如果大于则表明存在重名,程序抛出异常。 测试用例-第一版 因此,我们设计一个测试用例,来模拟测试计划重名的场景。...,用于对给定的信息,根据Locale来提供一个本地化翻译。...因此,一个看似只有2-3行的代码段,在使用Mockito造完测试桩之后,我们发现还有2个静态方法需要处理才能实现最初的测试目的,模拟测试计划名称重名的场景。

    3.4K10

    单元测试

    每个开发人员都写过很多代码、函数,但是你能保证你写的每个函数都能执行并且正常吗?   我们太多时间站在功能需求的角度来审视我们的代码,认为需求实现功能逻辑正常,我们就完成了自己的使命。...但是仅此而已吗,首先作为开发人员要知道,代码的终极目标有两个:实现需求保证逻辑正常、保证代码质量和可维护性。...当然这是一种理想情况,大多数我们在开发中还是先写实现,后写测试代码。...@MockBean 用来帮助mock一个对象。...测试覆盖率   单元测试覆盖率只是一个跑分,这个不是我们最终要追求的目标。还是那句话,做单元测试不仅仅是为了完成政治任务,或者一个好看的报告。

    1.7K30

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

    Mock服务可以依赖于一些框架来实现,最经典的就是Mockito。为什么最近专门来研究一下Mock对象的方法,是因为之前为了Mock下游服务直接修改了源代码中的实现。...但是因为用户中心的服务尚未发布,我直接修改了源代码中的实现中,返回了一个虚拟的用户信息。...由此,我开始了解如何在不修改源代码的情况下,对服务进行Mock,避免下一次再出现这样的问题。 Mockito Mockito是Java单元测试中使用率最高的Mock框架之一。...Mockito.mock 直接使用Mockito提供的mock方法即可以模拟出一个服务的实例。再结合when/thenReturn等语法完成方法的模拟实现。...Mockito其实提供了一个非常方便的注解叫做@InjectMocks,该注解会自动把该单元测试中声明的Mock对象注入到该Bean中。

    11.1K20

    Android开发之逻辑单元测试

    工具如jMock 、EasyMock 、Mockito等都有一个共同的缺点:不能mock静态、final、私有方法等。...为什么要mock?...mock就是模拟,在代码逻辑测试中,有时候我们需要某一个方法返回我们指定的值,这样才能跑我们预测的代码逻辑,从而通过验证执行结果的正确性来反映该代码逻辑是否有问题,比如: /** * 开始处理同步通知任务...().when(syncInformHandler).handle(Mockito.any(PushRequest.class), Mockito.any(PushResponse.class)); 对于一个...的相关代码 每一个单元测试方法都要写详细的注释,减少后面其他人来维护这个单元测试的成本 单元测试用户针对类去写,一个类:className对应一个单元测试用例类:TestclassName,而且包名是一样的

    1.4K10

    如何写好单元测试:Mock脱离数据库+不使用@SpringBootTest「建议收藏」

    其次,单元测试是只针对某一个类的一个方法(一个小的单元)来测,在测试过程中,我们不要启动其它东西,要脱离项目中其它因素可能产生的干扰。...众所周知,现在看到这里的各位都是架构师的能力,接下来我们一行行代码,一秒五喷,严厉抨击这段错误的单元测试: 1、不应使用@Autowired @Autowired private HelloService...4、如果查询的结果为空,那么会抛出异常。解决方法:使用required=false 那么问题就来了,我们只是要写单元测试,为什么要启动Spring呢?...,每一个Runner都有各自的特殊功能,你要根据需要选择不同的Runner来运行你的测试代码。...helloService.sayHello("zhangsan"); Assert.isTrue(true,"完全正确的单元测试"); } 这段代码可能跟上面有点不通

    3.5K10

    Mockito 一个优秀的 Mock 测试框架

    这就引出了我们今天的主角 Mockito,一个优秀的 Mock 测试框架。...今天我们要谈到的Mockito 就是一个优秀的 Mock 框架。 Mockito Mockito is a mocking framework that tastes really good....Mockito 是一个很好用的模拟框架。它让您可以使用干净简单的 API 编写漂亮的测试。Mockito 的可读性非常好,不会让你感动迷惑,产生的验证错误也很明确。...,这里我们通过mock 一个 List 对象,先添加几个元素,后面验证添加交互是否与我们预期的一致。...add("test2"); 测试用例 2 通过设值或者打桩的方式预设参数,如下所示,当执行 get(0) 操作时,我们通过 thenReturn()方法返回 hello,当执行 get(1)操作时我们抛出空指针异常

    1.8K20

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

    , Object actual) 断言两个对象引用的是同一个对象,否则抛出异常携带指定的message信息 assertNotSame(Object expected, Object actual) 断言两个对象引用的不是同一个对象...二、Mockito测试框架的使用 前面介绍的只能测试不涉及Android相关Api的java代码用例,如果涉及到Android相关Api的时候,就不方便了,这时如果不依赖第三方库的话可能需要使用仪器化测试跑到...Android设备上去运行,于是有一些比较好的第三方的替代框架可以来模拟使用Android的代码测试,Mockito就是基于依赖注入实现的一个测试框架。...Mockito中几种Mock对象的方式 使用之前通过静态方式导入会使用更方便: // 静态导入会使代码更简洁 import static org.mockito.Mockito.*; 直接mock一个对象...,因此传递Mockito中的任何验证方法次数的函数都可以,Mockito中的验证函数会返回的是一个VerificationMode类型。

    5.1K20
    领券