我有一些@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
}
答案 0 :(得分:1)
默认情况下,对于返回值的所有方法,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返回默认值(根据类型,false
或0
)。 Java AutoBoxing负责处理这些基元与其客观化的等价物之间的任何转换(例如布尔值到布尔值)。