Mockito thenReturn返回相同的实例
我在Mockito有这个:
when(mockedMergeContext.createNewEntityOfType(IService.class)).thenReturn(new ServiceMock());
createNewEntityOfType
方法应始终返回一个新的ServiceMock
实例,但它返回相同引用的两倍。
为什么thenReturn
方法不返回新的ServiceMock
?
thenReturn
方法将始终返回传递给它的内容。 new Servicemock()
代码在调用thenReturn
之前执行。 然后将创建的ServiceMock
传递给thenReturn
。 因此, thenReturn
具有ServiceMock
的绝对实例而不是创建机制。
如果您需要提供新实例,请使用thenAnswer
when(mockedMergeContext.createNewEntityOfType(IService.class)) .thenAnswer(new Answer() { public IService answer(InvocationOnMock invocation) { return new ServiceMock(); } });
您可能希望将其重构为不同的语句,以了解发生这种情况的原因。
Service svc = new ServiceMock(); when(mockedMergeContext.createNewEntityOfType(IService.class)).thenReturn( svc );
你现在看到为什么它不起作用? 🙂
它始终在svc中返回实例保持,每次调用该方法时都不会重新评估new ServiceMock()
。
在使用Lambdas的Java 8中,您可以使用
when(mockedMergeContext.createNewEntityOfType(IService.class)).thenAnswer(invocation -> new ServiceMock());
所以只需替换.thenReturn(new MyMock());
用.thenAnswer(invocation -> new MyMock());