有没有类似 "really nice mock" 的东西?

Is there something like a "really nice mock"?

如果您不想为所有内容定义行为并且不想限制对该模拟的调用,那么 EasyMock 和 Mockito 中的漂亮模拟是一件好事。

但对我来说它们有一个很大的缺陷:如果方法的 return 类型是 Object 或继承自 [=12 的任何东西,它们总是 return null =].

我想知道在一个或两个框架中是否有某些东西 returns Optional.empty() 对于 return Optional<?>Collections.emptyList() 的方法对于 return List<?> 等等的方法...

我还没有找到类似的东西。

Mockito 的当前版本 return 默认为空列表和可选。据我所知,这是 2.0 版的新功能(至少是 Optionals)。以下测试使用 Mockito 2.27.0 成功。

class MockitoTest
    static class SomeType {
        Optional<String> headline;
        List<String> texts;

        Optional<String> getHeadline() {
            return headline;
        }

        List<String> getTexts() {
            return texts;
        }
    }

    @Test
    void mock_returns_empty_List_by_default() {
        SomeType o = mock(SomeType.class);

        List<String> texts = o.getTexts();

        assertEquals(emptyList(), texts);
    }

    @Test
    void mock_returns_empty_Optional_by_default() {
        SomeType o = mock(SomeType.class);

        Optional<String> headline = o.getHeadline();

        assertFalse(headline.isPresent());
    }
}