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

Mockito When...thenReturn在集合时未返回期望值

Mockito是一个用于Java开发的开源测试框架,它可以帮助开发人员进行单元测试和集成测试。Mockito提供了一组简单而强大的API,用于创建和操作模拟对象(Mocks),以模拟依赖项并验证代码的行为。

在使用Mockito进行测试时,我们可以使用when...thenReturn语法来定义模拟对象的行为。通过这种方式,我们可以指定当某个方法被调用时,模拟对象应该返回什么值。

然而,当在集合上使用when...thenReturn时,可能会遇到未返回期望值的情况。这通常是因为在模拟对象的集合上调用方法时,Mockito默认会返回集合中元素的默认值,而不是我们预期的值。

为了解决这个问题,我们可以使用thenReturn方法的变体thenReturnElements。这个方法接受一个可变参数,用于指定模拟对象在调用方法时应该返回的值。通过使用thenReturnElements,我们可以确保模拟对象在集合上调用方法时返回我们预期的值。

下面是一个示例代码,演示了如何在集合上使用thenReturnElements

代码语言:txt
复制
List<String> mockList = Mockito.mock(List.class);
Mockito.when(mockList.get(Mockito.anyInt())).thenReturnElements("value1", "value2", "value3");

System.out.println(mockList.get(0));  // 输出:value1
System.out.println(mockList.get(1));  // 输出:value2
System.out.println(mockList.get(2));  // 输出:value3

在这个示例中,我们创建了一个模拟的List对象mockList,并使用when...thenReturnElements指定了在调用get方法时应该返回的值。然后,我们分别调用get方法,并打印返回的值。

需要注意的是,thenReturnElements方法是从Mockito 3.4版本开始引入的,因此确保你的Mockito版本符合要求。

对于腾讯云相关产品和产品介绍链接地址,由于题目要求不能提及具体的云计算品牌商,我无法给出相关链接。但你可以通过访问腾讯云的官方网站,查找与云计算相关的产品和服务。

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

相关·内容

Mockito 一个优秀的 Mock 测试框架

比如下面的场景,serviceA 中的 methodA() 方式依赖 serviceB 中的 methodB() 方法返回操作的结果。...我们通过使用 Mock 技术可以让开发不停滞,Mock技术的作用是将服务与服务之间的依赖测试自测阶段隔离开,让开发人员自己的应用内部通过模拟的方式把需要依赖外部的接口给构造出来,从而保证不被外界的开发进度所影响...今天我们要谈到的Mockito 就是一个优秀的 Mock 框架。 Mockito Mockito is a mocking framework that tastes really good....(mockedList, atMost(5)).add("test2"); 测试用例 2 通过设值或者打桩的方式预设参数,如下所示,当执行 get(0) 操作时,我们通过 thenReturn()方法返回...这种方式通常被称为Stubbing,除了使用 when...thenReturn 方式之外,还有一种形式可以表达,代码如下: @Test public void testDoReturn() throws

1.7K20
  • Mockito模拟进行单元测试

    assertEquals("hello world:0",mockList.get(0)); assertEquals("hello world:999",mockList.get(999)); } 修改对预设的调用返回默认期望...@Test public void unstubbed_invocations(){ //mock对象使用Answer来对预设的调用返回默认期望值 List mock = mock(...NULL,但是使用了Answer改变了默认期望值 assertEquals(999, mock.get(1)); //下面的size()没有预设,通常情况下会返回0,但是使用了Answer...add(3); } 连续调用 @Test(expected = RuntimeException.class) public void consecutive_calls(){ //模拟连续调用返回期望值..."first" Mockito.when(mockedList.get(0)).thenReturn("first"); Mock对象的时候,创建一个proxy对象,保存被调用的方法名(get),以及调用时候传递的参数

    9.3K20

    Mockito模拟进行单元测试

    assertEquals("hello world:0",mockList.get(0)); assertEquals("hello world:999",mockList.get(999)); } 修改对预设的调用返回默认期望...@Test public void unstubbed_invocations(){ //mock对象使用Answer来对预设的调用返回默认期望值 List mock = mock(...NULL,但是使用了Answer改变了默认期望值 assertEquals(999, mock.get(1)); //下面的size()没有预设,通常情况下会返回0,但是使用了Answer...add(3); } 连续调用 @Test(expected = RuntimeException.class) public void consecutive_calls(){ //模拟连续调用返回期望值..."first" Mockito.when(mockedList.get(0)).thenReturn("first"); Mock对象的时候,创建一个proxy对象,保存被调用的方法名(get),以及调用时候传递的参数

    6.9K20

    使用 Junit + Mockito 实践单元测试

    它用于执行耗时的活动,例如:连接到数据库 @AfterClass 用于 static方法,完成所有测试之后,执行一次。...它用于执行清理活动,例如:与数据库断开连接 @Ignore 指定要忽略的测试 @Test(expected = Exception.class) 如果该方法引发命名异常,则失败 @Test(timeout...而这正是 Mockito 的使命,Mockito 是一个流行的 mock 框架,可以与 JUnit 结合使用,Mockito 允许我们创建和配置 mock 对象,使用 Mockito 将大大简化了具有外部依赖项的类的测试开发...测试中使用 Mockito,通常会: mock 外部依赖关系并将 mock 对象插入待测代码 执行被测代码 验证代码是否正确执行 ?...使用静态 mock() 方法创建 mock 对象 Iterator iterator = mock(Iterator.class); // when...thenReturn

    4.6K50

    Spring Boot的单元测试(概念)

    Spring Boot测试提供了一个名为spring-boot-starter-test的Starter。...Mockito:Java mocking框架,用于模拟任何Spring管理的Bean,例如在单元测试中模拟一个第三方系统Service接口返回的数据,而不去真正调用第三方系统。...AssertJ:一个流畅的assertion库,同时也提供了更多的期望值与测试返回值的比较方式。 JSONassert:对JSON对象或JSON字符串断言的库。...问题是单元测试不能实际调用CreditService(因为CreditService是第三方系统),因此,我们单元测试类需要使用Mockito的注解@MockBean自动注入Spring管理的Service...import org.mockito.BDDMockito; import org.springframework.boot.test.mock.mockito.MockBean; @RunWith(SpringRunner.class

    1.6K30

    如何使用模拟框架测试微服务? | 微服务系列第八篇

    实现的服务:开发期间,某些服务可能无法使用,因为项目中存在意外延迟。 在这两种情况下,开发人员都无法使用依赖服务来运行测试。...它消除了测试之前启动外部服务的需要。 Mockito:用于代理Java接口方法调用的模拟框架。 Mockito还可用于验证方法调用顺序并提供测试应用程序所需的返回值。...org.mockito.Mockito.*; 要模拟类或接口,请在创建测试执行之前测试方法中包含以下调用: ClassOrInterface mock = mock(ClassOrInterface.class...以下示例中,对get方法的调用返回一个空的List值: List list = mock(List.class); when(list.get(anyInt()).thenReturn(Collections...then方法标识REST调用输出中的期望值

    3.6K20

    powermockito教程_SpringBoot使用Powermockito单元测试

    版本说明 一般powermockito和mockito配合来使用,有相应的版本要求。...比如一个类中有许多的public方法,也有static方法,static方法中调用static方法,但我们并不想mock静态方法中的任何代码,就需要给这个static方法mock一个返回值,mockito...UserSourceController spy = PowerMockito.spy(new UserSourceController()); // 模拟私有方法(反射),意思是传入”zhangsan”,强制返回...mockito使用继承的方式实现mock的,用CGLIB生成mock对象代替真实的对象进行执行,为了mock实例的方法,你可以子类中覆盖它,而static方法是不能被子类覆盖的,所以mockito不能...verify(redisLockService, times(1)).lock(any(String.class), any(Long.class), any(Long.class)); // 实际值#期望值

    1.6K20

    Mockito + JUnit 单元测试实例

    文章目录 前言 创建项目并添加依赖 编写代码并测试 总结 前言 日常 Java 开发中,一般都需要进行单元测试,而 Mock 测试则是单元测试中的重要方法之一。...众多的 Mock 框架中,Mockito 算是比较流行的一个框架了,大家经常将它和 JUnit 结合起来使用。...同样的,首先我们项目中添加一个简单的 Demo 类,并在其中声明一个方法,其最终代码如下。...第 5 行则对应测试中的第二步,执行测试代码,然后返回执行结果。 第 6 行则对应测试中的第三步,验证代码是否被正确执行。这里主要用到的是 Mockito 中的断言方法。...假设我们修改下以上代码中断言中的期望值,则测试不通过,此时 IDEA 会返回断言中的提示信息。

    3.1K10

    有赞单元测试实践

    结果验证:这里除了验证被测方法的返回值外,还需要验证插入到数据库中的数据是否正确,某外部方法被调用过n次或调用过。 必要的清理:对打桩进行清理,对数据库脏数据进行清理。.../mockito http://www.mockito.org/spring/mockito.xsd"> ......locations = { "classpath:applicationContext-test.xml" }) 4.3 结果验证 结果验证,包括两部分,一个是被测函数的返回值...,这个需要编写者自行验证,另一个是写入数据库的值,这部分是通过方法上添加注解,告诉单元测试框架要验证的语句,执行验证语句并与期望值比较。...5.3 单元测试结果校验 一方面开发仍然需要自行校验函数的返回值,校验 mock 函数是否被执行,另一方面对数据库数据更改的验证可以直接通过注解声明校验的 sql 文件路径即可。

    3.3K30

    重学SpringBoot系列之Mockito测试

    重学SpringBoot系列之Mockito测试 mock中文文档 使用Mockito编码完成接口测试 编码实现接口测试 为什么要写代码做测试?...---- Mockito测试框架 Mockito是GitHub上使用最广泛的Mock框架,并与JUnit结合使用.Mockito框架可以创建和配置mock对象.使用Mockito简化了具有外部依赖的类的测试开发...Mockito测试框架可以帮助我们模拟HTTP请求,从而达到服务端测试目的。因为其不会真的去发送HTTP请求,而是模拟HTTP请求内容,从而节省了HTTP请求的网络传输,测试速度更快。...---断言 .andExpect(MockMvcResultMatchers.status().isOk()) //HTTP:status 200 //可以取出返回结果中的值和期望值进行比较...---断言 .andExpect(MockMvcResultMatchers.status().isOk()) //HTTP:status 200 //可以取出返回结果中的值和期望值进行比较

    2.4K20

    小白搞 Spring Boot单元测试

    单元测试的引入 Spring Boot中引入单元测试只需pom文件中加入如下依赖,其中提供了JUnit、SpringBoot Test等常见单元测试库。...使用Mockito模拟数据库操作 前面介绍web请求测试时使用了Mock技术,该技术常用于被测试模块(方法)依赖于外部系统(web服务、中间件或是数据库)时。...来于网络,侵删 由于web服务或数据库不可达时,可以对其进行Mock,测试时不需要真实的模块也可完成测试。...[method] 参数匹配(直接执行不判断) Mockito.when(methodCall).thenAnswer(answer)) 预期回调接口生成期望值 Mockito.doNothing().when...[method] 不做任何返回 使用Mockito对DAO层的单元测试进行模拟后,得到的新的单元测试类如下 : @RunWith(SpringRunner.class) public class UserDaoTest

    4.5K10

    Mockito和PowerMock用法

    单元测试中,我们往往想去独立地去测一个类中的某个方法,但是这个类可不是独立的,它会去调用一些其它类的方法和service,这也就导致了以下两个问题:外部服务可能无法单元测试的环境中正常工作,因为它们可能需要访问数据库或者使用一些其它的外部系统...一、mock测试和Mock对象 mock对象就是调试期间用来作为真实对象的替代品 mock测试就是测试过程中,对那些不容易构建的对象用一个虚拟对象来代替测试的方法就叫mock测试 二、Mockito...模拟测试无返回值的方法 Person person =mock(Person.class); doNothing().when(person).remove(); // 4、mockito还能对被测试的方法强行抛出异常...}); // 7、Mock对象是能调用模拟方法,调用不了它真实的方法,但是spy() 或者@spy 可以监视一个真实的对象,对它进行方法调用时它将调用真实的方法,同时也可以设定这个对象的方法让它返回我们的期望值...开发,起语法规则与Mockito一致,主要区别在于使用方面,以实现完成对private/static/final等方法(也支持mock的对象是方法内部new出来的)的Mock(模拟)。

    3K32

    Springboot 使用单元测试

    面向对象领域,最小单元对应于类的某个成员方法。...通常意义的单元测试会用于验证某场景、某条件下某方法的行为结果,举个例子: 我想验证 Equals 方法,两个对象类型不一致时应该返回 false 单元测试的初衷,是对各个相互独立,互不影响的基本单元基线测试...Assert 用于验证测试方法是否按期望执行或者结果是否符合期望值 See !并不是很复杂,可是大多数开发者并不喜欢做单元测试。...如上图,A 模块依赖于 B 模块, B 模块不可达的时候,我们对 依赖接口进行了 Mock。这样执行测试时,不需要真实的 B 模块便可完成测试。...可以实现你想要的 Mock效果,如下: Mockito.when( somemethod ).thenReturn( some thing to return); 然而,进行 mock 方法时,需要使用

    1.1K00

    Java一分钟之-Mockito:模拟对象测试

    Java单元测试领域,Mockito是一个广受好评的模拟框架,它使得开发者能够轻松创建和配置模拟对象,以便于隔离环境中测试代码,尤其是那些依赖复杂或难以控制的对象。...模拟对象(Mocks) Mockito允许你创建“虚拟”对象,代替真实的依赖对象,这样可以测试中完全控制这些对象的行为和返回值。 2....预期行为(Stubbing) 通过设置预期行为,你可以定义模拟对象接收到特定方法调用时应如何响应,比如返回特定值或抛出异常。 3....忽略使用的模拟方法调用 没有验证模拟对象的所有调用,可能会遗漏某些重要逻辑的测试。 解决方案:使用Mockito的verify()方法验证所有预期的交互。 3....不恰当的模拟配置 错误地配置模拟对象的返回值或行为,可能导致测试结果不符合预期。 解决方案:仔细配置每个模拟方法的返回值和行为,确保它们与测试目标相符。 4.

    22710

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

    Mockito学习 Mockito 是一个强大的用于 Java 开发的模拟测试框架, 通过 Mockito 我们可以创建和配置 Mock 对象, 进而简化有外部依赖的类的测试.可以不进行外部依赖,快速进行...Mock 模拟 mock测试就是测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。 Mockito好处 无手写 : 无需自己编写模拟对象。...返回值支持 : 支持返回值 异常支持 : 支持例外 订单检查支持 : 支持检查方法调用的顺序 注释支持 : 支持使用注释创建模拟 Mockito集成 引入依赖 ...它还会检测测试中可用的使用的存根, 并使用@Mock注释对模拟进行初始化。 @InjectMocks 它标记应在其上执行注入的字段或参数。 @Captor 它允许创建字段级参数捕获器。...mock(User.class); when(user.getUsername()).thenReturn("快乐"); //当调用user.getUsername()返回

    1.7K10

    快速学会Springboot中编写Mock单元测试

    Mockito: 知名 Java mock 模拟框架. JSONassert: JSON断言库. JsonPath: JSON XPath 操作类库. 以上都是单元测试中经常接触的类库。...一旦请求不通过将抛出java.lang.AssertionError错误, 会把期望值(Expected)跟实际值打印出来(下图2标识)。如果跟预期相同只会出现下图1。 ?...5.测试打桩 有个很常见的情形,开发中有可能你调用的其他服务没有开发完,比如你有个短信发送接口还在办理短信接口手续,但是你还需要短信接口来进行测试。...拿上面的BookService来说,假如其实现类逻辑还没有确定,我们可以通过规定其入参以及对应的返回值来模拟这个bean的逻辑,或者根据某个情形下进行某个路由操作的选择(如果入参是A则结果为B,如果为C...这里我们会用到Mockito 测试场景描述如下: 指定打桩对象的返回值 判断某个打桩对象的某个方法被调用及调用的次数 指定打桩对象抛出某个特定异常 一般有以下几种组合: do/when:包括doThrow

    6.9K10

    如何正确编写单元测试?

    DesensitizationUtil.len11mobile(mobile),"12****6789"); } } 当len11mobile()方法发生变化而被破坏时,该测试用例可以检测出其返回结果与期望值不匹配...系统重构时,这一点尤为重要 Mockito的基础用法 上述例子仅仅完成了一个及其普通的单元测试,但是我们大多数的业务场景往往不那么简单,我们可能需要查询数据库、可能需要调用三方接口、也可能需要依赖其他组件...于是Mockito被引入进来,使用Mockito,我们可以模拟一些对象的行为使其返回特定的数据。...再说白一点就是Mockito会在运行单元测试时生成指定对象的代理对象,从而跳过真实的业务逻辑并返回我们预先设定好的数据类型(如果不理解的话建议先动手写个Demo,相信你会有更深刻的理解)。...的代理对象,@InjectMocks注解可以将@Mock生成代理对象注入到serivce中,最后具体的测试用例中通过when()设置不同的返回数据,从而完成UserMasterMapper对象的模拟,

    2.7K40

    博文精选|Mockito使用指南

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

    4.2K30
    领券