【问题标题】:Mockito get all mocked objectsMockito 获取所有模拟对象
【发布时间】:2018-01-10 09:36:47
【问题描述】:

我想获取所有模拟对象的列表。使用以前版本的 Mockito 我可以这样做:

List<Object> createdMocks = new LinkedList<Object>();
MockingProgress progress = new ThreadSafeMockingProgress();
progress.setListener(new CollectCreatedMocks(createdMocks));

这些监听器在最新的 2.8 版本的 Mockito 中被移除了,有什么替代方案吗?

【问题讨论】:

  • 具体来说,这些已在 2.0.80-beta 中删除。 internal 包被描述为“不被客户使用”。自己维护一个List&lt;Object&gt; 有什么问题?为什么你需要框架来为你做这件事?
  • @Michael 如果我打算添加一个新的依赖项并模拟它,我必须明确地将它添加到列表中。因此,为我的所有课程添加一个监听器来获取模拟将有助于减少责任。

标签: java unit-testing testing mocking mockito


【解决方案1】:

自 Mockito 2.x 以来,这已被 org.mockito.listeners.MockitoListener 的实现所取代,您可以像这样参与:

Mockito.framework().addListener()

例如:

@Test
public void listAllMocks() {
    List<Object> mocks = new ArrayList<>();

    // can be replaced by a lambda if using java 8+
    Mockito.framework().addListener(new MockCreationListener() {
        @Override
        public void onMockCreated(Object mock, MockCreationSettings settings) {
            mocks.add(mock);
        }
    });

    A a = Mockito.mock(A.class);
    B b = Mockito.mock(B.class);

    // ... do something with a, b

    // verify
    assertThat(mocks.size(), is(2));
    assertThat(mocks, hasItem(a));
    assertThat(mocks, hasItem(b));
}

【讨论】:

  • 一个带有 lambda 表达式的衬垫 java List&lt;Object&gt; mocks = new ArrayList&lt;&gt;(); Mockito.framework().addListener((MockCreationListener) (mock, settings) -&gt; mocks.add(mock));
  • @qoomon 删除换行符不会使某些内容成为“单行”,只会降低代码的可读性。
猜你喜欢
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2015-03-20
  • 2013-03-07
  • 2017-08-21
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
相关资源
最近更新 更多