2015-12-10 38 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

沒有辦法做到這一點。 –