Java Mockito返回相同的实例

Java Mockito返回相同的实例,java,unit-testing,mockito,Java,Unit Testing,Mockito,我在Mockito有这个: when(mockedMergeContext.createNewEntityOfType(IService.class)).thenReturn(newServiceMock()); createNewEntityOfType方法应始终返回一个新的ServiceMock实例,但它返回两次相同的引用 为什么thenReturn方法不返回新的ServiceMock?方法将始终返回传递给它的内容。代码newservicemock()在调用thenReturn之前执行。然

我在Mockito有这个:

when(mockedMergeContext.createNewEntityOfType(IService.class)).thenReturn(newServiceMock());
createNewEntityOfType
方法应始终返回一个新的
ServiceMock
实例,但它返回两次相同的引用


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

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

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

when(mockedMergeContext.createNewEntityOfType(IService.class))
.thenAnswer(新答案){
公共IService应答(调用锁调用){
返回新的ServiceMock();
}
});

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

Service svc = new ServiceMock();
when(mockedMergeContext.createNewEntityOfType(IService.class)).thenReturn( svc );
你现在明白为什么它不起作用了吗?:)


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

在Java 8 with Lambdas中,您只需使用

when(mockedMergeContext.createNewEntityOfType(IService.class)).thenAnswer(invocation -> new ServiceMock());
所以只需替换
,然后返回(newmymock())


使用
。然后回答(调用->新建MyMock())

请尝试用短截图表示感谢,感谢您为我节省了一天的时间:)
when(mockedMergeContext.createNewEntityOfType(IService.class)).thenAnswer(invocation -> new ServiceMock());