任何人都可以确定为什么Mockito 1.9.5会在' doesWhatIExpectItTo'中抛出一个未完成的StubbingException。测试此代码?
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) );
}
}
我已经尝试了各种替代方案,包括争论匹配器和随后的答案,通过我能够找到的SO未完成的存根异常问题,我似乎无法找到任何可以解决这个基本问题的东西。 / p>
似乎有一些简单/明显的东西让我失踪。
答案 0 :(得分:1)
卫生署!
问题是我在.thenReturn()调用的上下文中调用了getANewThing(),并且我无法在该上下文中启动新的.when()调用。
答案是在ThingCache.getThing()方法上调用.when()之前构造Thing模拟。