Java Mockito返回相同的实例
我在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之前执行。然
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());