是否有类似“非常好的模拟”的内容?

时间:2019-05-17 09:25:30

标签: junit mocking mockito easymock

EasyMock和Mockito中的精美模拟都是很好的开始,如果您不想定义所有行为,也不想限制对该模拟的调用。

但是对我来说,它们有一个很大的缺陷:如果方法的返回类型为null或从Object继承的任何东西,它们总是返回Object

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

我还找不到类似的东西。

1 个答案:

答案 0 :(得分:1)

Mockito的当前版本默认情况下返回空的列表和可选项。 AFAIK,这是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());
    }
}