Mockito 1.9.5抛出UnfinishedStubbingException

时间:2014-09-25 23:00:29

标签: mockito stubbing

任何人都可以确定为什么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>

似乎有一些简单/明显的东西让我失踪。

1 个答案:

答案 0 :(得分:1)

卫生署!

问题是我在.thenReturn()调用的上下文中调用了getANewThing(),并且我无法在该上下文中启动新的.when()调用。

答案是在ThingCache.getThing()方法上调用.when()之前构造Thing模拟。