可选级联?

时间:2015-12-10 15:39:35

标签: java unit-testing jmockit

级联返回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 个答案:

答案 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()
  •   
  • 其他引用类型:通过级联返回模拟实例。
  •   
  • 数组类型:返回每个维度中零元素(空)的数组。
  •