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