myb*_*dur 21 java unit-testing mockito
我在Mockito有这个:
when(mockedMergeContext.createNewEntityOfType(IService.class)).thenReturn(new ServiceMock());
Run Code Online (Sandbox Code Playgroud)
该createNewEntityOfType方法应始终返回一个新ServiceMock实例,但它返回两次相同的引用.
为什么该thenReturn方法不返回新的ServiceMock?
Joh*_*n B 48
该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();
}
});
Run Code Online (Sandbox Code Playgroud)
pti*_*son 12
在带有 Lambdas 的 Java 8 中,您可以使用
when(mockedMergeContext.createNewEntityOfType(IService.class)).thenAnswer(invocation -> new ServiceMock());
Run Code Online (Sandbox Code Playgroud)
所以只需更换 .thenReturn(new MyMock());
和 .thenAnswer(invocation -> new MyMock());
Aug*_*sto 10
您可能希望将其重构为不同的语句,以了解发生这种情况的原因.
Service svc = new ServiceMock();
when(mockedMergeContext.createNewEntityOfType(IService.class)).thenReturn( svc );
Run Code Online (Sandbox Code Playgroud)
你现在看到为什么它不起作用?:)
它总是在svc中返回实例保持,new ServiceMock()每次调用该方法时都不会重新计算.
| 归档时间: |
|
| 查看次数: |
11604 次 |
| 最近记录: |