有人能确定Mockito 1.9.5为什么在该代码的"doesWhatIExpectItTo"测试中抛出UnfinishedStubbingException吗?
public interface Thing {
String getId();
boolean isReady();
}
public interface ThingCache {
Thing getThing(String theId);
}
private Set<String> getThingIdSet(int theSize){
Set<String> thingIds = new HashSet<String>();
for(int i = 0; i < theSize; i++ ) {
thingIds.add("thingId-" + i);
}
return thingIds;
}
private Thing getANewThing(String theId, boolean isReady) {
Thing theNewThing = mock(Thing.class);
when( theNewThing.getId() ).thenReturn(theId);
when( theNewThing.isReady() ).thenReturn(isReady);
return theNewThing;
}
@Test
public void doesWhatIExpectItTo() {
ThingCache theCache = mock(ThingCache.class);
Set<String> thingIds = getThingIdSet(5);
for ( String thingId : thingIds ) {
when( theCache.getThing( thingId ) ).thenReturn( getANewThing(thingId, true) );
}
}
我尝试了各种选择,包括论点匹配器和Answer,浏览了我能找到的未完成的存根异常问题,但我似乎找不到任何东西来克服这个基本问题。
我似乎缺少了一些简单/明显的东西。
Doh!
问题是,我在.thenReturn()调用的上下文中调用getANewThing(),并且不能在该上下文中启动新的.when()调用。
答案是在对ThingCache.getThing()方法调用.when()之前构造Thing mock。