【发布时间】:2014-07-14 15:19:56
【问题描述】:
我正在使用 PowerMockito 在我的测试中模拟静态缓存。 一般来说,缓存是这样工作的:
Cache.getInstance().findEntityById(AbstractDTO);
// so, if I want a TypeA, I use:
TypeADTo typeADTO = // go the dto from the db ...
TypeA = Cache.getInstance().findEntityById(typeADTO);
静态缓存在应用程序中被广泛使用。所以要在单元测试中使用它,我使用:
PowerMockito.mockStatic( Cache.class );
final Cache mockedCache = PowerMockito.mock( Cache.class );
PowerMockito.when( Cache.getInstance() ).thenReturn( mockedCache );
// mock all I want to get
TypeA typeA = new TypeA(some parameters);
TypeB typeB = new TypeB(some parameters);
PowerMockito.when(
Cache.getInstance().findEntityByBusinessId(
Mockito.any( TypeADTO.class ) ) ).thenReturn( typeA );
PowerMockito.when(
Cache.getInstance().findEntityByBusinessId(
Mockito.any( TypeADTO.class ), Mockito.anyBoolean() ) )
.thenReturn( typeA );
PowerMockito.when(
Cache.getInstance().findEntityByBusinessId(
Mockito.any( TypeBDTO.class ) ) ).thenReturn(
tybeB );
PowerMockito.when(
Cache.getInstance().findEntityByBusinessId(
Mockito.any( TypeBDTO.class ), Mockito.anyBoolean() ) )
.thenReturn( typeB );
我为所有需要的类型创建了一些模拟语句。 (如您所见,一种类型需要模拟不止一种方法)
问题是:power mockito 总是返回在最后一个 PowerMockito.when(...) 语句中设置的对象。
【问题讨论】:
标签: java unit-testing mockito powermock