返回本地类型的未被调用的调用的值

时间:2014-10-01 19:01:06

标签: java mockito

我有一些@Mock对象,我没有指定在该对象上调用方法的返回值。该方法返回int(不是Integer)。我很惊讶地看到Mockito没有扔NPE并返回0.这是预期的行为吗?

例如:

class Foo {
    public int getInt() {
        return 1;
    }
}
@Mock
private Foo foo;

@InjectMock
private ClassToTest classToTest;

@Test
public void doTest() {
    int a = classToTest.callFoo(); // which calls foo.getInt()
    Assert.AssertEquals(a, 0); // true

}

2 个答案:

答案 0 :(得分:1)

根据documentation

  

默认情况下,对于返回值的所有方法,mock返回null,空集合或适当的原始/原始包装值(例如:0,false,...表示int / Integer,boolean / Boolean,...)

是的,这是预期的行为。您还可以使用以下内容覆盖默认存根:

@Test
public void doTest() {
    Mockito.when(foo.getInt()).thenReturn(15);
    int a = classToTest.callFoo(); // which calls foo.getInt()
    //Assert.assertEquals(a, 0); // NO LONGER TRUE
    Assert.assertEquals(a, 15);

}

答案 1 :(得分:0)

是。对于返回原始数据类型的方法,Mockito返回默认值(根据类型,false0)。 Java AutoBoxing负责处理这些基元与其客观化的等价物之间的任何转换(例如布尔值到布尔值)。