我在Mockito有这个:
when(mockedMergeContext.createNewEntityOfType(IService.class)).thenReturn(new ServiceMock());
createNewEntityOfType
方法应该总是返回一个新的ServiceMock
实例,但它返回两次相同的引用。
为什么thenReturn
方法不返回新的ServiceMock
发布于 2011-11-22 21:19:46
thenReturn
方法将始终返回传递给它的内容。在调用thenReturn
之前正在执行代码new Servicemock()
。然后将创建的ServiceMock
传递给thenReturn
。因此,thenReturn
有一个ServiceMock
的绝对实例,而不是一个创建机制。
如果需要提供新实例,请使用thenAnswer
when(mockedMergeContext.createNewEntityOfType(IService.class))
.thenAnswer(new Answer<IService>() {
public IService answer(InvocationOnMock invocation) {
return new ServiceMock();
}
});
发布于 2017-02-24 01:22:35
在带有Lambdas的Java 8中,您只需使用
when(mockedMergeContext.createNewEntityOfType(IService.class)).thenAnswer(invocation -> new ServiceMock());
所以只要替换.thenReturn(new MyMock());
就行了
使用.thenAnswer(invocation -> new MyMock());
发布于 2011-11-22 21:19:58
您可能希望将其重构为不同的语句,以了解为什么会发生这种情况。
Service svc = new ServiceMock();
when(mockedMergeContext.createNewEntityOfType(IService.class)).thenReturn( svc );
你现在明白为什么它不工作了吗?:)
它总是在svc中返回实例保留,它不会在每次调用该方法时重新计算new ServiceMock()
。
https://stackoverflow.com/questions/8227405
复制相似问题