首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Mockito thenReturn返回相同的实例

Mockito thenReturn返回相同的实例
EN

Stack Overflow用户
提问于 2011-11-22 21:15:19
回答 3查看 14.7K关注 0票数 26

我在Mockito有这个:

代码语言:javascript
复制
when(mockedMergeContext.createNewEntityOfType(IService.class)).thenReturn(new ServiceMock());

createNewEntityOfType方法应该总是返回一个新的ServiceMock实例,但它返回两次相同的引用。

为什么thenReturn方法不返回新的ServiceMock

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-22 21:19:46

thenReturn方法将始终返回传递给它的内容。在调用thenReturn之前正在执行代码new Servicemock()。然后将创建的ServiceMock传递给thenReturn。因此,thenReturn有一个ServiceMock的绝对实例,而不是一个创建机制。

如果需要提供新实例,请使用thenAnswer

代码语言:javascript
复制
when(mockedMergeContext.createNewEntityOfType(IService.class))
  .thenAnswer(new Answer<IService>() {
     public IService answer(InvocationOnMock invocation) {
        return new ServiceMock();
     }
   });
票数 59
EN

Stack Overflow用户

发布于 2017-02-24 01:22:35

在带有Lambdas的Java 8中,您只需使用

代码语言:javascript
复制
when(mockedMergeContext.createNewEntityOfType(IService.class)).thenAnswer(invocation -> new ServiceMock());

所以只要替换.thenReturn(new MyMock());就行了

使用.thenAnswer(invocation -> new MyMock());

票数 13
EN

Stack Overflow用户

发布于 2011-11-22 21:19:58

您可能希望将其重构为不同的语句,以了解为什么会发生这种情况。

代码语言:javascript
复制
Service svc = new ServiceMock();
when(mockedMergeContext.createNewEntityOfType(IService.class)).thenReturn( svc );

你现在明白为什么它不工作了吗?:)

它总是在svc中返回实例保留,它不会在每次调用该方法时重新计算new ServiceMock()

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8227405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档