2014-10-01 36 views
0

我有一些@Mock对象,并且没有指定在该对象上调用方法的返回值。该方法返回int(不是整数)。我很惊讶地看到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 

} 

回答

1

按照documentation

默认情况下,返回值的所有方法,模拟返回null,一个空的集合或相应的原始/原始包装值(例如:0,false,...用于int/Integer,布尔值/布尔值,...)。

所以是的,这是预期的行为。您也可以使用类似下面的内容覆盖默认桩:

@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); 

} 
0

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

相关问题