2015-12-10 35 views
0

级联嘲that返回Optional时的行为是什么?我的期望是the returned Optional object is also a mock可选级联?

但是,下面的测试表明,这并非如此:

@RunWith(JMockit.class) 
public class CascadingTest { 
    public static interface Foo { 
     Optional<Bar> getOptionalBar(); 
    } 

    public static interface Bar { 
    } 

    @Test 
    public void cascadingOptional(@Mocked final Foo foo) { 
     final Optional<Bar> opt = foo.getOptionalBar(); 
     assertThat(opt.get(), is(not(nullValue()))); 
    } 
} 

cascadingOptional测试由于opt.get()抛出的异常:

java.util.NoSuchElementException: No value present 
    at java.util.Optional.get(Optional.java:135) 
    at jmockit.CascadingTest.cascadingOptional(CascadingTest.java:39) 

这似乎表明opt不是模拟。顺便说一句,如何(直接)检查对象是否是JMockit模拟?

感谢

JMockit V1.17

回答

1

mocking API documentation指定了默认情况下,从嘲笑方法返回,根据它们的返回类型:

如果没有结果被记录为给定的期望,则所有匹配的调用将根据 方法返回类型返回相应的默认值:

  • 大多数java.lang类型(String,Object等):返回null。
  • java.math类型(BigDecimal等):返回null。
  • 原始/包装类型:返回标准默认值(boolean/Boolean为false,int/Integer为0,等等)。
  • java.util.List,java.util.Collection或java.lang.Iterable:返回Collections.EMPTY_LIST。
  • java.util.Iterator or java.util.ListIterator:返回一个空的迭代器。
  • java.util.Set:返回Collections.EMPTY_SET。
  • java.util.SortedSet:返回一个不可修改的空有序集。
  • java.util.Map:返回Collections.EMPTY_MAP。
  • java.util.SortedMap:返回一个不可修改的空排序映射。
  • java.util.Optional:returns Optional.empty()
  • 其他参考类型:通过级联返回模拟实例。
  • 数组类型:返回每个维中具有零个元素(空)的数组。
+0

如何(直接)检查对象是否是JMockit模拟? – beluchin

+0

没有办法做到这一点。 –