级联返回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
答案 0 :(得分:1)
mocking API documentation根据返回类型指定默认情况下从模拟方法返回的内容:
如果没有为给定的期望记录结果,则所有匹配的调用将根据以下内容返回相应的默认值 方法返回类型:
- 大多数java.lang类型(String,Object等):返回null。
- java.math类型(BigDecimal等):返回null。
- 原始/包装类型:返回标准默认值(布尔值/布尔值为false,int / Integer为0,依此类推)。
- java.util.List,java.util.Collection或java.lang.Iterable:返回Collections.EMPTY_LIST。
- java.util.Iterator或java.util.ListIterator:返回一个空的迭代器。
- java.util.Set:返回Collections.EMPTY_SET。
- java.util.SortedSet:返回一个不可修改的空排序集。
- java.util.Map:返回Collections.EMPTY_MAP。
- java.util.SortedMap:返回一个不可修改的空排序映射。
- java.util.Optional:返回Optional.empty()。
- 其他引用类型:通过级联返回模拟实例。
- 数组类型:返回每个维度中零元素(空)的数组。