【问题标题】:Is there something like a "really nice mock"?有没有像“非常好的模拟”这样的东西?
【发布时间】:2019-05-17 09:25:30
【问题描述】:

如果您不想为所有内容定义行为并且不想限制对该模拟的调用,那么 EasyMock 和 Mockito 中的不错的模拟都是一个不错的开始。

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

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

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

【问题讨论】:

    标签: junit mocking mockito easymock


    【解决方案1】:

    Mockito 的当前版本默认返回空列表和选项。 AFAIK 这是 2.0 版的新功能(至少是可选的)。以下测试在 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());
        }
    }
    

    【讨论】:

    • 好的,那么它就像使用框架的更新版本一样简单。
    • @Chris 至少对于 Mockito 来说,这是一种很好的做法。该框架非常生动,并且经常添加新功能。
    猜你喜欢
    • 2013-07-30
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    相关资源
    最近更新 更多