I have this in Mockito:
when(mockedMergeContext.createNewEntityOfType(IService.class)).thenReturn(new ServiceMock());
The createNewEntityOfType
method should always return a new ServiceMock
instance but it returns twice the same reference.
Why the thenReturn
method doesn't return new ServiceMock
?
The thenReturn
method will always return what is passed to it. The code new Servicemock()
is being executed prior to the call to thenReturn
. The created ServiceMock
is then being passed to thenReturn
. Therefore thenReturn
has a absolute instance of ServiceMock
not a creation mechanism.
If you need to provide an new instance, use thenAnswer
when(mockedMergeContext.createNewEntityOfType(IService.class))
.thenAnswer(new Answer<IService>() {
public IService answer(InvocationOnMock invocation) {
return new ServiceMock();
}
});
You might want to refactor that into different statements to understand why that happens.
Service svc = new ServiceMock();
when(mockedMergeContext.createNewEntityOfType(IService.class)).thenReturn( svc );
Do you see now why it doesn't work? :)
It's always returning the instance hold in svc, it won't re-evaluate new ServiceMock()
each time that the method is invoked.
In Java 8 with Lambdas you can just use
when(mockedMergeContext.createNewEntityOfType(IService.class)).thenAnswer(invocation -> new ServiceMock());
So just replace .thenReturn(new MyMock());
with .thenAnswer(invocation -> new MyMock());
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.