java - 未 stub 调用的 native 类型的返回值

标签 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

}

最佳答案

根据documentation :

By default, for all methods that return value, mock returns null, an empty collection or appropriate primitive/primitive wrapper value (e.g: 0, false, ... for int/Integer, boolean/Boolean, ...).

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

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

}

关于java - 未 stub 调用的 native 类型的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26148642/

相关文章:

java - 合并多个 SQL 表

java - 使用 Java 访问 USB,以找到拇指驱动器制造商的序列号/唯一 ID

java - Mockito 不使用 @PreAuthorize 和 Spring Boot 进行模拟

spring-boot - PowerMockito 在 Spring Boot 中模拟私有(private)方法

java - 仅使用单个循环打印星形图案而不使用递归?

java - 更新 JFrame 最大化边界,同时保持其最大化

hibernate - 如何在 ConstraintValidator 实现中模拟 EntityManager

java - 我无法使用 Mockito 模拟存储库

java - 如何将 Joda-Time DateTime 格式化为仅 mm/dd/yyyy?

java - Mockito 和 ReloadableResourceBundleMessageSource 不能很好地结合在一起吗?